1

我们使用 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 = [];

所以两个问题:

  1. 茉莉花匹配是否有一般建议而不是 Chai,反之亦然?哪个是社区的首选?还是种子项目没有赶上某种过渡?
  2. 作为一个新手,我更喜欢 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。

4

0 回答 0