如何在Karma中使用Mocha require选项

时间:2016-05-30 22:19:10

标签: mocha karma-runner karma-mocha

我一直在尝试使用mocha require选项:

karma start

但我不知道如何从业力中做到这一点。我们的想法是运行myglobals.js,它会自动需要karma.conf.js

可以在karma start内或其他方式进行吗?

也许我没有以正确的方式使用业力/摩卡。

我的想法是:

  • 我想为客户端(反应)和服务器(节点/快速)进行单元/集成测试
  • 我想运行myglobals.js并测试客户端和服务器测试
  • 我发现预先要求使用以下文件非常有用,以避免在所有测试中都需要一些东西:

const chai = require('chai'); // Load Chai assertions global.expect = chai.expect; global.assert = chai.assert; chai.should(); // Load Sinon global.sinon = require('sinon'); // Initialize Chai plugins chai.use(require('sinon-chai')); chai.use(require('chai-as-promised')); chai.use(require('chai-things'));

mocha mytest.js --require myglobals.js

对于服务器端,我使用以下命令使其工作:

npm run test

但是,我仍然想让它在karma start (调用npm run test:server下运行,而不是创建另一个data TABLE1; informat id $3. Ser $1. Start datetime19. End datetime19.; format Start End datetime19.; input id Ser Start End; datalines; Qa. A 23May2016:00:34:00 23May2016:00:40:00 Qw. A 23May2016:00:34:00 23May2016:00:40:00 Qz. A 23May2016:00:34:00 23May2016:00:40:00 ; data TABLE2; informat id $3. Ser $1. Start datetime19. End datetime19.; format Start End datetime19.; input id Ser Start End; datalines; Qw. B 23May2016:00:35:00 23May2016:00:41:00 Qz. A 23May2016:00:37:00 23May2016:00:42:00 ; proc sort data = Table1; by id; run; proc sort data = Table2; by id; run; data want; merge TABLE1(IN = T1 RENAME = (Start=StartA End=EndA)) TABLE2(IN = T2 RENAME = (Start=StartB End=EndB)); by id; if t1 and t2 then do; if intck("seconds",StartA, StartB) <= 120 then in_time = 1; else in_time = 0; end; else if t1 and not t2 then in_time = -1; run; 命令。

此外,我想在客户端上做同样的事情。我在那里使用webpack作为预处理器。

任何想法是否有可能实现?或者也许我的方式错了?

1 个答案:

答案 0 :(得分:3)

简答

浏览器中的Mocha不支持等效的--require选项,但您不需要它。您可以在测试之前加载所需的任何内容,列出要在测试文件前面加载files的文件。或者如果你使用像RequireJS这样的加载器,写一个test-main.js来加载你首先加载--require的模块,然后加载你的测试文件。

长答案

如果您查看Mocha的代码,您会看到--require文件中唯一使用requires.forEach(function(mod) { require(mod); }); 的地方。此选项不会进一步传递到Mocha代码中,但会立即用于bin/_mocha

--require

当您在浏览器中运行Mocha时,这些代码都不会运行,如果您查看其余的Mocha代码,您将无法在其他地方找到类似的工具。为什么呢?

因为它没有用处。 require选项在命令行中非常有用。没有它,在Mocha加载测试文件之前加载模块的唯一方法是编写自定义代码以启动Mocha或在每个测试文件的开头放置必要的--require调用。

在浏览器中,如果您不使用模块加载器,则只需加载使用script加载的代码,方法是将加载它们的script元素放在前面。加载测试的files个元素。在Karma中,这意味着将这些文件提前放在karma.conf.js中的test-main.js列表中。或者,如果您使用RequireJS,则编写--require以便加载分两个阶段完成:一个加载您在命令行上通过const allTestFiles = []; const TEST_REGEXP = /test\/test.*\.js$/i; Object.keys(window.__karma__.files).forEach((file) => { if (TEST_REGEXP.test(file)) { const normalizedTestModule = file.replace(/^\/base\/|\.js$/g, ""); allTestFiles.push(normalizedTestModule); } }); require.config({ baseUrl: "/base", paths: { ... }, }); // This guarantees that "a", "b", "c" loads before any other module require(["a", "b", "c", ...], () => { require(allTestFiles, window.__karma__.start); }); 加载的模块,以及第二个加载你的测试文件。它可能是这样的:

bid_amount