Karma 运行ner 不 运行 所有文件

Karma runner does not run all files

由于一些我无法理解的奇怪原因,我的业力 运行ner 有时不会 运行 所有测试文件。

karma.conf.js:

module.exports = function(config) {
config.set({

    basePath: '',
    frameworks: ['jasmine'],

    files: [
        '../lib/angular/angular.min.js',
        '../lib/angular-mocks/angular-mocks.js',
        '../lib/angular-notify/dist/angular-notify.min.js',
        '../lib/JsCollection/dist/jscollection-0.1.5.min.js',
        '../lib/lodash/dist/lodash.min.js',
        'node_modules/jasmine-ajax/lib/mock-ajax.js',
        'app/**/*.js',
        'tests/**/*.js'
    ],

    plugins: [ 'karma-jasmine', 'karma-phantomjs-launcher'],
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['PhantomJS'],
    singleRun: false
});
};

所以这就是发生的事情,我 运行 我的测试,一切都很好:

oli@devone:~/projects/2bi/public/src$ karma start
03 06 2016 11:40:44.861:WARN [karma]: No captured browser, open http://localhost:9876/
03 06 2016 11:40:44.921:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
03 06 2016 11:40:44.967:INFO [launcher]: Starting browser PhantomJS
03 06 2016 11:40:46.764:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket /#qmOPHCmxWaFWMmvrAAAA with id 14003688
PhantomJS 2.1.1 (Linux 0.0.0): Executed 46 of 46 SUCCESS (0.708 secs / 0.888 secs)

所以我的 46 个测试都正常执行,一切都很好。然后我开始编写代码,karma 开始表现得很奇怪,它有时不会 运行 所有测试,但有时会。通常它只卡在 运行 宁说 16 个测试所以我必须重新启动它以再次 运行 所有测试。

这里我改了几次公式测试:

03 06 2016 11:42:25.059:INFO [watcher]: Removed file "/home/oli/projects/2bi/public/src/tests/common/services/Formula.test.js".
PhantomJS 2.1.1 (Linux 0.0.0): Executed 16 of 16 SUCCESS (0.18 secs / 0.255 secs)
03 06 2016 11:42:32.882:INFO [watcher]: Added file "/home/oli/projects/2bi/public/src/tests/common/services/Formula.test.js".
03 06 2016 11:42:32.967:INFO [watcher]: Changed file "/home/oli/projects/2bi/public/src/tests/common/services/Formula.test.js".
PhantomJS 2.1.1 (Linux 0.0.0): Executed 46 of 46 SUCCESS (0.465 secs / 0.598 secs)
03 06 2016 11:43:12.529:INFO [watcher]: Removed file "/home/oli/projects/2bi/public/src/tests/common/services/Formula.test.js".
PhantomJS 2.1.1 (Linux 0.0.0): Executed 16 of 16 SUCCESS (0.136 secs / 0.246 secs)
03 06 2016 11:43:20.094:INFO [watcher]: Added file "/home/oli/projects/2bi/public/src/tests/common/services/Formula.test.js".
03 06 2016 11:43:20.183:INFO [watcher]: Changed file "/home/oli/projects/2bi/public/src/tests/common/services/Formula.test.js".
PhantomJS 2.1.1 (Linux 0.0.0): Executed 46 of 46 SUCCESS (0.506 secs / 0.626 secs)

一切都是 运行 在 vi​​rtualbox 机器上,但文件系统是本地的。

有人知道发生了什么事吗?

经过一些研究发现业力观察者可能有一些问题。

在这个特殊情况下对我有帮助的是在 karma.conf.js 中添加 usePolling: false

如果有人有这个问题,我会把它留在这里。

编辑器存储到临时文件并替换原始文件似乎是问题所在。

我正在使用 JetBrains RubyMine。取消选中 使用 "safe write"(首先将更改保存到临时文件) 解决了这个问题。

我遇到过类似的情况,问题是在单元测试中使用了 setTimeout。这是导致 Karma 在 运行 所有测试中随机失败的测试代码示例:

it('should test something', () => {
    ...

    setTimeout(() => {
        expect(...)
    }, 0)
})

因为 setTimeout Karma 不知道测试是否完成,所以解决方案是在测试完成时告诉 Karma。这是修复:

it('should test something', (done) => {
    ...

    setTimeout(() => {
        expect(...)
        done()
    }, 0)
})

这解决了我们的问题,现在所有测试都 运行 正确。