通常,当测试失败时,它会显示测试名称和测试编号,但在某些情况下,它只显示测试编号.
Karma是否按特定顺序运行测试?按字母顺序排列?
下面是jenkins上我的控制台输出的屏幕截图.
解决方法
例如,Mocha按照描述的顺序运行测试,并在测试文件中调用它.如果你有两个测试文件,首先执行a.js和b.js以及a.js,那么Mocha将首先在a.js中运行测试.如果首先执行b.js,那么Mocha将首先在b.js中运行测试. Mocha没有进一步的排序. (Mocha有一个排序选项,但它仅在使用mocha命令行工具在Node中运行Mocha时使用.它不适用于在Karma中使用Mocha,因为Karma在浏览器中运行Mocha,其中Mocha不支持排序. )
如果使用模块加载器(如RequireJS或SystemJS)动态加载测试文件,这会使事情变得复杂.如果确实需要([“a”,“b”])并且两个模块不相互依赖,那么它们加载的顺序是不确定的. a可以先加载,或者b可以先加载,这样运行测试的顺序从一次运行到下一次运行可能不一致.您可以通过配置或嵌套需求调用强制执行订单. (例如,再次假设模块不依赖于彼此,require([“a”],()=> require(“b”))确保a中的测试将在b中的测试之前执行.)
更复杂的是,如果某些测试运行程序确定您的测试套件存在错误,则会中止测试运行.这不会改变测试的顺序,但可能会使测试缺失.例如,Mocha认为用于设置和拆除测试数据的钩子中的错误(通过反对测试中的错误本身)是测试套件中的错误并将中止运行.如果您的三个测试依赖于失败的设置代码,Mocha将跳过测试.您将看到三次测试中的一次失败,而不是三次失败.这是一个示例测试文件,包含3个测试和before hook中的失败. (之前的钩子,又名“在所有之前”用于在一组测试之前设置测试数据.)
before(() => { throw new Error("oh no!"); }); it("one",() => {}); it("two",() => {}); it("three",() => {});
这是我的karma.conf.js:
module.exports = function(config) { config.set({ basePath: '',frameworks: ['mocha'],files: [ 'test.js' ],exclude: [ ],preprocessors: { },reporters: ['progress'],port: 9876,colors: true,logLevel: config.LOG_INFO,autoWatch: false,browsers: ['Chrome'],singleRun: false,concurrency: Infinity }) }
这是输出(我用< ts>替换了时间戳):
<ts>:INFO [karma]: Karma v1.7.0 server started at http://0.0.0.0:9876/ <ts>:INFO [launcher]: Launching browser Chrome with unlimited concurrency <ts>:INFO [launcher]: Starting browser Chrome <ts>:INFO [Chrome 58.0.3029 (Linux 0.0.0)]: Connected on socket qfNuMyp4q3SyUBOsAAAA with id 24880742 Chrome 58.0.3029 (Linux 0.0.0) "before all" hook Failed Error: oh no! at Context.before (test.js:3:11) Chrome 58.0.3029 (Linux 0.0.0): Executed 1 of 3 (1 Failed) ERROR (0.013 secs / 0.001 secs)
它说“执行了1的3”,因为它尝试执行第一次测试,但是这次尝试在前钩子中失败,所以Mocha没有尝试运行任何后来的测试.