javascript - requirejs 抛出 404 试图从 karma runner 加载文件

标签 javascript requirejs karma-runner

我正在尝试使用 requirejs 加载测试助手模块,但即使它已经在 karma run 开始时作为依赖项加载,它也会失败,而且我无法弄清楚问题是什么,我总是得到

There is no timestamp for /base/spec/helpers/testHelpers!'

测试运行良好,在其中我需要应用程序的任何模块都没有问题,只有当我特别需要 spec 文件夹中的某些东西时它才会失败。

我检查了所有与 karma 相关的问题,但没有一个适用于这些案例。

我的 karma.conf 文件:

module.exports = function (config) {
  'use strict';

  config.set({
    basePath: '',
    frameworks: ['jasmine', 'requirejs'],
    files: [
      'bootstrapTests.js',
      {
          pattern: 'app/**/*.js',
          included: false
      },
      {
          pattern: 'entities/**/*.js',
          included: false
      },
      {
          pattern: 'config/**/*.js',
          included: false
      },
      {
          pattern: 'libs/**/*.js',
          included: false
      },
      {
          pattern: 'spec/**/*Spec.js',
          included: false
      },
      {
          pattern: 'spec/helpers/**/*.js',
          included: false
      }
    ],
    exclude: [
        'bootstrap.js',
        'bootstrap.built.js'
    ],
    preprocessors: {
        'app/**/*.js': ['coverage'],
        'entities/**/*.js': ['coverage']
    },
    coverageReporter: {
        reporters: [
            {
                type: 'text-summary'
            }
        ]
    },
    reporters: ['progress', 'coverage'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['PhantomJS'],
    singleRun: false
  });
};

我的 bootstrapTests.js 文件:

var tests = [];

for (var file in window.__karma__.files) {
    if (window.__karma__.files.hasOwnProperty(file)) {
        // Add all spec files and helpers
        if (/spec\/.+.js$/.test(file)) {
            tests.push(file);
        }
    }
}

require.config({
    baseUrl: '/base',
    paths: {
        'backbone': 'libs/backbone',
        'marionette': 'libs/backbone.marionette',
        'jquery': 'libs/jquery-2.1.1',
        'json2': 'libs/json2',
        'underscore': 'libs/underscore',
        'twig': 'libs/twig',

        'editor': 'app/editor',
        'widgets': 'app/widgets',
        'menu': 'app/menu',

        'helpers': 'spec/helpers'
    },
    map: {
        '*': {
            'jquery': 'config/jquery/jqueryPrivate'
        },
        'config/jquery/jqueryPrivate': { 'jquery': 'jquery' }
    },
    deps: tests,

    callback: window.__karma__.start
});

所以在我的测试中,

define([
    'app/app',
    'backbone',
    'editor/editorController',
    'editor/editorApp',
], function (
    myApp,
    Backbone,
    editorController
) {
    'use strict';

    describe('editorApp', function () {

    .....

工作起来很有魅力,但是当我尝试的时候

define([
    'app/common/routerUtilities',
    'backbone',
    'helpers/testHelpers'
], function (
    routerUtilities,
    Backbone,
    testHelpers
) {
    'use strict';

    describe('routerUtilities', function () {
    ...

尝试获取 testHelpers 失败,即使模块已经加载,也总是会出现错误。除了缩短的路径之外,我尝试以所有可能的方式指定路径:spec/helpers/testHelpers、/base/spec/helpers/testHelpers、/spec/helpers/testHelpers、../../helpers/testHelpers 等...

该文件作为依赖项包含在测试数组中(选中),因此它与我的测试和其他测试设置模块一起加载(使用 console.log 检查):

LOG: ['/base/spec/app/appSpec.js',
'/base/spec/app/common/routerUtilitiesSpec.js',
'/base/spec/app/editor/EditorLayoutViewSpec.js',
'/base/spec/app/editor/editorAppSpec.js',
'/base/spec/app/editor/editorControllerSpec.js',
'/base/spec/app/menu/menuControllerSpec.js',
'/base/spec/helpers/envSetup.js',
'/base/spec/helpers/testHelpers.js']

我检查过它也包含在 window._ karma _.files 中(为简洁起见进行了编辑):

LOG: Object{
 /base/bootstrapTests.js: 'c389a1d36d1c48f2879d434b10fd5a25b6b07758', 
 /base/app/app.js: '7ad39554809146effd20dd1db908fc068f8119ba',
 /base/app/common/routerUtilities.js: '4da0e1d1794cccc727b544cacbc6d672c0d9965a',
 ...
/base/config/marionette/renderer.js: '34a5e729f6133aa13841c5e949307cd437ca331b', 
/base/config/marionette/templateCache.js: '9f1901d4c6f43f5f90dadacb1c4ac179efd14b15', 
 /base/spec/app/appSpec.js: 'e01f4fea3533e25cfcd4f7621e1c1c5559e0eed8', 
/base/spec/app/common/routerUtilitiesSpec.js: 'a06b9793a635633d053142dff24d1ba4427dd365',
/base/spec/app/editor/EditorLayoutViewSpec.js: 'a24c7e8742e38b86d626bd6f3e45baacfa6af5eb', 
/base/spec/app/editor/editorAppSpec.js: '800c0e8e82840ebd0d1af07c3ec4556a24ee0b04', 
/base/spec/app/editor/editorControllerSpec.js: 'd2e259a477da85b6a2f742f5c6c3a4a34b7e340b', 
/base/spec/helpers/envSetup.js: '297aa1e59477d967aa210bece1726e8a372cb630', 
/base/spec/helpers/testHelpers.js: '5266065d344ca69f8f5980db16bf6d131492ebd0'

spec/helpers/testHelpers.js 的内容是:

define([
    'backbone'
], function (
    Backbone
) {
    'use strict';

    var testHelpers = {
        setupRoutingTest: function () {
            Backbone.history.start();
            Backbone.history.navigate('');
        },
        teardownRoutingTest: function () {
            Backbone.history.navigate('');
            Backbone.history.stop();
        }
    };
    return testHelpers;
});

我的文件夹结构是:

|-app

  |---common

  |---editor

  |---menu

  |---widgets

|-config

  |---jquery

  |---marionette

|-entities

|-features

|-gruntTasks

   |---lib

|-spec

   |---app

      |-----common

      |-----editor

      |-----menu

      |-----widgets

   |---entities

   |---helpers

 |-tmp

最佳答案

您好,karma-requirejs 似乎不喜欢将资源加载到 tests 数组中。

尝试修改代码以排除辅助文件,这可能会有所帮助

var tests = [];

for (var file in window.__karma__.files) {
    if (window.__karma__.files.hasOwnProperty(file)) {
        // Add all spec files and helpers
        if (/spec\/.+.js$/.test(file)) {
            tests.push(file);
        }
    }
}

关于javascript - requirejs 抛出 404 试图从 karma runner 加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24632297/

相关文章:

javascript - 如何解析每个周期有两个低潮/高潮的 worldtide.info JSON?

javascript - 如何在 NodeJS 中运行无限阻塞进程?

javascript - 在 Javascript AND 中,为什么定义一个没有名字的模块是有用的?

javascript - 使用上下文时 RequireJs 忽略配置

angular - 如何让 Karma 在工作区内运行特定 Angular 6 组件库的测试

javascript - .attr 选择器在each 循环中不起作用?

javascript - 合并 JavaScript 文件的版权问题?

ruby-on-rails - rails : What's the advantage/disadvantage of putting scripts and stylesheets directly in public folder?

angularjs - 如何通过 Angular、Karma 和 Webpack 的单独文件分割代码覆盖率?

npm - 错误 : No provider for "framework:jasmine"!(正在解析:框架:jasmine)