如何使用带有 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 中。那么你必须:
将您转换后的 chai-date-string
脚本包含在 files
中。
在 files
中添加另一个调用 chai.use(chaiDateString)
的脚本。 repo中显示的example code省略了对chai.use
的调用,但是不能省略
应该能够使用任何带有单元测试的 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 中。那么你必须:
将您转换后的
chai-date-string
脚本包含在files
中。在
files
中添加另一个调用chai.use(chaiDateString)
的脚本。 repo中显示的example code省略了对chai.use
的调用,但是不能省略