Unit testing 如何使用Chai插件,比如带有Karma/Mocha/Chai的Chai date string?

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

应该能够使用任何带有Karma/Mocha和Chai单元测试的Chai插件,还是需要将其转换为与Karma兼容的特殊插件

我希望使用来执行类似于
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)