javascript - Gulp + karma + jasmine + angular + singleRun :true = angular fails to inject

标签 javascript angularjs gulp karma-runner karma-jasmine

我在通过 Karma 和 Gulp 运行 Jasmine 测试时遇到问题,我正在使用

通过 gulp 任务运行测试
return new karma.Server({
    configFile: __dirname + '\\karma.conf.js',
    singleRun: true
}, done).start();

我的 Angular 依赖项注入(inject)失败,我收到标准 Angular unknown provider myProvider 错误。当我将 singleRun 属性更改为 false 时,大部分单元测试都通过了(但仍有一组失败)。

测试已经(并且仍然)在 Chutzpah 中运行良好。

我尝试将测试减少到准系统:

var myProvider;
beforeEach(module('MyModule'));

beforeEach(inject(function (_my_) {
    myProvider = _my_;
}));

it("exists", function () {
    expect(myProvider).not.toBeUndefined();
});

它仍然失败并出现 unknown provider myProvider 错误。同样,如果我将 singleRun 设置为 false,它们运行良好。我试过运行 PhantomJS 和 Chrome,它们都表现出完全相同的行为。

我正在使用 angular 1.4.7,我在 package.json 中的依赖项看起来像

  "dependencies": {
    "gulp": "^3.9.0",
    "gulp-chug": "^0.4.2",
    "gulp-install": "^0.6.0",
    "gulp-util": "^3.0.7",
    "phantomjs": "^1.9.19",
    "jasmine-core": "^2.4.1",
    "karma": "^0.13.19",
    "karma-jasmine": "^0.3.6",
    "karma-phantomjs-launcher": "^0.2.3",
    "karma-spec-reporter": "^0.0.23",
    "karma-chrome-launcher": "^0.2.2"
  }

karma .conf.js:

module.exports = function (config) {
    config.set({
        frameworks: ["jasmine"],
        reporters: ["spec"],
        browsers: ["PhantomJS"],
        files: [
            "./path/to/jquery/jquery-1.11.0.min.js",

            "./path/to/angular/angular.js",
            "./path/to/angular/angular-route.js",
            "./path/to/angular/angular-mocks.js",

            // I'm using this path order (app -> modules -> all) 
            // due to recommendations found on SO
            "./path/to/application/app.js",
            "./path/to/application/**/*Module.js",
            "./path/to/application/**/*.js",

            // For now, I'm just running the one test to simplify debugging
            "./path/to/tests/myTest.Test.js"
        ]
    });
};

有什么想法吗?

最佳答案

事实证明,我们的自定义 Angular 提供程序具有内部依赖性,由于某种原因,这些依赖性未通过 singleRun: true 解决。

我在 karma.conf 中专门设置了这些文件的加载顺序,以便依赖项以“正确”的顺序加载,现在我得到与使用 singleRun:false 运行时相同的结果(与 singleRun:false 相同的少数测试仍然失败,但这是另一回事了)。

这与 Chutzpah 一起工作的原因是那些引用(在每个单独的测试文件中列出)的顺序是正确的。

关于javascript - Gulp + karma + jasmine + angular + singleRun :true = angular fails to inject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860192/

相关文章:

gulp.on ('data' ) 如何将数据传递到下一个管道

Javascript/jQuery 在单个对象中转换 DOM

javascript - 是否可以使用 Angular 获取元素的内部 HTML?

javascript - 捆绑和缩小导致 Angular 错误 : $injector:unpr unknown provider

javascript - Angular-carousel 无法在 safari 浏览器中工作

javascript - 使用 $(document).ready() 时,Angular 模块不可用

typescript - gulp:通过管道将 typescript 输出到 mocha

javascript - 如何限制一个元素在一分钟内被点击的次数?

javascript - 试图在 javascript/polymer js 的另一个页面上显示/显示搜索结果

javascript - 尽管 CSS 相同,但我网站上的一个 div 比另一个高。为什么?