如何使用Chai插件,如chai-date-string和Karma / Mocha / Chai?

时间:2017-10-03 10:06:42

标签: unit-testing karma-runner chai

应该可以使用任何Chai插件与Karma / Mocha和Chai进行单元测试,还是需要将其转换为特殊的karma兼容插件?

我想使用chai-date-string来执行类似expect(requestBody.time).to.be.a.dateString();的操作,但是将它们安装为NPM模块并将其放在我的测试文件中并没有任何好运。

然后我遇到了karma-chai-plugins,我认为它被设计为使用其他chai插件(甚至超出它捆绑的少数插件),但是将其添加为NPM模块,然后添加Chai插件名称到框架列表,但这没有用。

我的karma.conf.js

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['mocha', 'chai', 'chai-date-string', 'sinon-chai', 'browserify'],
    client: { chai: { includeStack: true } },
    files: [ 'playmob.js', 'test/**/*_test.js' ],
    preprocessors: {
      'test/**/*.js': [ 'browserify' ]
    },
    browserify: {
      debug: true,
    },
    exclude: [ ],
    reporters: ['mocha', 'beep'],
    mochaReporter: { ignoreSkipped: true },
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['ChromeHeadless'],
    singleRun: false,
    concurrency: Infinity
  })
}

package.json中的版本(我必须明确安装较新版本的chai-as-promised以解决依赖性问题):

  "devDependencies": {
    "browserify": "^14.4.0",
    "chai": "^4.1.2",
    "chai-as-promised": "^7.1.1",
    "chai-date-string": "^0.1.0",
    "karma": "^1.7.1",
    "karma-beep-reporter": "^0.1.4",
    "karma-browserify": "^5.1.1",
    "karma-chai-plugins": "^0.9.0",
    "karma-chrome-launcher": "^2.2.0",
    "karma-cli": "^1.0.1",
    "karma-mocha": "^1.3.0",
    "karma-mocha-reporter": "^2.2.4",
    "karma-sinon-chai": "^1.3.2",
    "mocha": "^3.5.3",
    "sinon": "^2.4.1",
    "sinon-chai": "^2.14.0",
    "uglifyjs": "^2.4.11",
    "url": "^0.11.0",
    "watchify": "^3.9.0"
  }

导致以下错误:

> playmobjs@0.2.0 test /Users/jschuur/Code/Playmob/js_api_lib
> karma start

/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:9
      throw error('No provider for "' + name + '"!');
      ^

Error: No provider for "framework:chai-date-string"! (Resolving: framework:chai-date-string)
    at error (/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:22:12)

1 个答案:

答案 0 :(得分:1)

当我查看karma-chai-plugins的代码时,我看到了一系列hardcoded plugin names。在我看来,karma-chai-plugins只识别那些源代码中硬编码的Chai插件。因此,我认为您不能将其用于chai-date-string

此外,chai-date-string不是以易于在浏览器中加载的格式分发的。您可以使用Browserify或Webpack将其转换为将chaiDateString之类的内容导出到全局空间的文件。然后你必须:

  1. 加入files转换后的chai-date-string脚本。

  2. files中添加另一个调用chai.use(chaiDateString)的脚本。回购中显示的example code省略了对chai.use的调用,但不能省略。