Unit testing 如何使用Chai插件,比如带有Karma/Mocha/Chai的Chai date string?
应该能够使用任何带有Karma/Mocha和Chai单元测试的Chai插件,还是需要将其转换为与Karma兼容的特殊插件 我希望使用来执行类似于Unit testing 如何使用Chai插件,比如带有Karma/Mocha/Chai的Chai date string?,unit-testing,karma-runner,chai,Unit Testing,Karma Runner,Chai,应该能够使用任何带有Karma/Mocha和Chai单元测试的Chai插件,还是需要将其转换为与Karma兼容的特殊插件 我希望使用来执行类似于expect(requestBody.time).to.be.a.dateString()的操作,但仅仅将它们作为NPM模块安装并要求它们出现在我的测试文件中并没有任何运气 然后我遇到了一个问题,我认为它是为了使用其他chai插件而设计的(甚至超出了它附带的少数插件),但将其添加为NPM模块,然后将chai插件名称添加到框架列表中,但这不起作用 我的ka
expect(requestBody.time).to.be.a.dateString()的操作代码>,但仅仅将它们作为NPM模块安装并要求它们出现在我的测试文件中并没有任何运气
然后我遇到了一个问题,我认为它是为了使用其他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以避免依赖性问题):
导致以下错误:
> 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插件的代码时,我看到了一系列。在我看来,karma-chai插件
只识别那些在其源代码中硬编码的chai插件。因此,我认为您不能将其用于日期字符串
此外,chai date string
的发布格式不便于在浏览器中加载。您可以使用Browserify或Webpack将其转换为一个文件,将类似于chaiDateString
的内容导出到全局空间。那么你必须:
在文件
中包含转换的日期字符串
脚本
在调用chai.use(chaiDateString)
的文件中添加另一个脚本。回购协议中显示的省略了调用chai.use
,但不能省略
我的设置已经使用了browserify,事实上,我在另一个测试中使用了url
模块,而没有在karma.conf.js
中设置它,所以我不确定需要更多的设置。我确实仔细阅读了你的建议,并尝试添加chai.use(chaiDateString)
到我的playmob_test.js文件的顶部,以及在我的文件
块中包含node_modules/chai date string/index.js的一些变体,但没有运气。我仍然收到相同的错误。如果您收到相同的错误,那可能是因为您仍然在框架
设置中使用日期字符串
。你必须把它从那里移走。(我的第一段中暗示了这一点,因为唯一允许它出现在框架
中的是karma chai插件
,但您不能使用它。)是的,我看到您正在使用browserify。如果您在测试文件中使用var chaiDateString=require(“chai date string”)
并在每个测试文件中放置chai.use(chaiDateString)
,我想您可以使用现有的配置。但是,如果您希望一次性设置日期字符串
,而无需在所有测试文件中要求它
,则不能依赖karma.conf.js
中的Browserify配置。您需要将日期字符串与测试文件分开处理。我没有在Karma中使用Browserify,所以我不知道您是否可以在Karma.conf.js
中执行此功能所需的配置。我只是在我的评论后进行了更多的实验,发现了您所说的:只要我添加chai.use(chaiDateString)
,它就可以正常工作,在karma.conf.js
中没有任何特殊引用。结果比我想象的要容易!谢谢你把我推过这条线。我的理解是,在某种程度上,所有以karma-
开头的模块都会自动加载,因此我甚至不需要在frameworks
块中加载它。问题解决了!最后一点澄清:如果您只是以这种方式使用chai插件,那么您根本不需要karma-chai插件。
> 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)