如何使用带有 Karma/Mocha/Chai 的 Chai 插件,例如 chai-date-string?

How do I use a Chai plugin like chai-date-string with Karma/Mocha/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)

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

此外,chai-date-string 并未以易于在浏览器中加载的格式分发。您可以使用 Browserify 或 Webpack 将其转换为一个文件,将类似 chaiDateString 的内容导出到全局 space 中。那么你必须:

  1. 将您转换后的 chai-date-string 脚本包含在 files 中。

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