我们使用 Angular 种子项目设置我们的 Angular 项目,并使用 jasmine 测试框架进行测试。
但是,我感到困惑和惊讶,因为很多 jasmine 文档与期望/匹配逻辑和间谍无关。
出于期望,我希望能够使用 jasmine 文档中的内容,例如:
expect(...).toBeTruthy()
expect(...).toBeFalsy()
// etc...
这些都不起作用,而是看起来我必须编写 chai 类型的代码:
expect(...).to.be.true;
expect(...).to.be.false;
// etc...
并且让间谍能够写出这样的期望:
spyOn(foo, 'setBar');
// ...do some stuff
expect(foo.setBar).toHaveBeenCalled();
foo.setBar.calls.reset();
但我必须写:
expect(foo.setBar.calls.length).to.equal(1);
// reset calls (this is particularly ugly)
foo.setBar.calls = [];
foo.setBar.argsForCall = [];
所以两个问题:
- 茉莉花匹配是否有一般建议而不是 Chai,反之亦然?哪个是社区的首选?还是种子项目没有赶上某种过渡?
- 作为一个新手,我更喜欢 Jasmine 匹配(特别是在使用间谍时),所以我如何进行 grunt 测试以使用 Jasmine 而不是 Chai?
此外,如果让 see 项目使用使用 Jasmine 2.0 和 1.3 的 karma-jasmine 插件,那就太好了。
谢谢。
更新
我应该注意另外两件事。我们运行的是带有 grunt 和 karma-jasmine 的测试,例如:
grunt test:unit
我们的 karma.conf.js 文件看起来像:
module.exports = function(config){
config.set({
basePath : '../',
files : [
'app/lib/angular/angular.js',
'app/lib/angular/angular-*.js',
'test/lib/angular/angular-mocks.js',
'app/js/**/*.js',
'test/unit/**/*.js'
],
exclude : [
'app/lib/angular/angular-loader.js',
'app/lib/angular/*.min.js',
'app/lib/angular/angular-scenario.js'
],
autoWatch : true,
frameworks: ['jasmine'],
browsers : ['Chrome'],
plugins : [
'karma-junit-reporter',
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-jasmine'
],
junitReporter : {
outputFile: 'test_out/unit.xml',
suite: 'unit'
}
})}
我认为框架:['jasmine'] 会让我们使用 jasmine,而框架:['mocha', 'chai'] 会让我们使用 chai。