【问题标题】:karma cannot load files injected by requirejskarma 无法加载 requirejs 注入的文件
【发布时间】:2013-07-03 19:32:57
【问题描述】:

我无法运行一个简单的业力测试。我有以下代码结构:

js/
  |-- tests.js
  |-- karma.config.js
  |-- app/
         |-- controllers.js
  |-- tests/
         |-- unit/
                 |-- loginSpec.js
  |-- vendor/
         |-- jquery.js

我正在关注http://karma-runner.github.io/0.8/plus/RequireJS.html 的文档,并将我的配置设置如下(减去不重要的部分):

// base path, that will be used to resolve files and exclude
basePath = '';

// list of files / patterns to load in the browser
files = [
    JASMINE,
    JASMINE_ADAPTER,
    REQUIRE,
    REQUIRE_ADAPTER,
    'tests.js',
    {pattern: 'tests/unit/*.js', included: false}
];

在我的 controllers.js 中,我定义了一个名为 LoginCtrl 的函数,我想在 loginSpec.js 中测试这个函数

define(['controllers'],function(controllers) {
    describe('Login controllers', function() {
        describe('LoginCtrl', function(){
            it('should return 1', function() {
                var scope = {},
                ctrl = new LoginCtrl(scope);
                expect(1).toBe(1);
            });
        });
    });
});

问题是我的浏览器无法加载controllers.js 文件,尽管我已将我的主测试文件的requirejs 配置(tests.js)设置如下:

var tests = Object.keys(window.__karma__.files).filter(function (file) {
      return /Spec\.js$/.test(file);
});
requirejs.config({
    baseUrl: '/base/app',
    paths: {
        jquery: 'vendor/jquery',
    },
    deps: tests,
    callback: window.__karma__.start
});

浏览器确实会在http://localhost:9876/base/app/controllers.js 处查找文件。这不是正确的道路吗?

【问题讨论】:

    标签: requirejs karma-runner


    【解决方案1】:

    路径我觉得不行,应该是jquery: '../vendor/jquery',因为requirejs基点指向app目录。但这不是唯一的问题......

    通过业力,您应该将每个文件添加到您想要使用的模式中。带有include: true 标志的文件将由 karma 运行,其他文件可以由测试使用。如果两个模式覆盖一个文件名,那么第一个模式将覆盖第二个(所以这与我们通常的顺序相反)。在您的情况下,您应该使用类似 karma.conf.js:

    module.exports = function (config) {
        config.set({
            basePath: './',
            frameworks: ['jasmine', 'requirejs'],
            files: [
                {pattern: 'tests.js', included: true},
                {pattern: 'test/**/*.js', included: false},
                {pattern: 'app/**/*.js', included: false},
                {pattern: 'vendor/**/*.js', included: false}
            ],
            exclude: [
    
            ],
            reporters: ['progress'],
            port: 9876,
            colors: true,
            logLevel: config.LOG_INFO,
            autoWatch: true,
            browsers: ['Firefox'],
            captureTimeout: 6000,
            singleRun: false
        });
    };
    

    【讨论】:

      【解决方案2】:

      我有类似的问题,但我没有找到好的解决方案。我必须通过在我的规范文件中添加 .js 扩展名来应用“hack”,在你的情况下,尝试在你的 loginSpec.js 中将 'controllers' 更改为 'controllers.js'

      【讨论】:

        猜你喜欢
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-23
        • 2017-11-01
        相关资源
        最近更新 更多