Javascript 是否可以在一个测试文件中使用控制台和浏览器中的chai运行mocha测试?

Javascript 是否可以在一个测试文件中使用控制台和浏览器中的chai运行mocha测试?,javascript,unit-testing,mocha.js,chai,test-runner,Javascript,Unit Testing,Mocha.js,Chai,Test Runner,我为一个项目设置了一个小测试环境。单元测试应使用mocha和chai。我已将html文件设置为测试运行程序: <!DOCTYPE html> <html> <head> <title>Mocha Tests</title> <link rel="stylesheet" href="node_modules/mocha/mocha.css"> </head> <body>

我为一个项目设置了一个小测试环境。单元测试应使用
mocha
chai
。我已将
html
文件设置为测试运行程序:

<!DOCTYPE html>
<html>
  <head>
    <title>Mocha Tests</title>
    <link rel="stylesheet" href="node_modules/mocha/mocha.css">
  </head>
  <body>
    <div id="mocha"></div>
    <script src="node_modules/mocha/mocha.js"></script>
    <script src="node_modules/chai/chai.js"></script>
    <script>mocha.setup('bdd')</script>
    <script src="test/chaiTest.js"></script>
    <script>mocha.run();</script>
  </body>
</html>
现在,当我在浏览器中调用测试运行程序时,结果将正确显示。它很好用。但当我在控制台上运行
mocha
时,它告诉我
chai没有定义

所以为了在控制台中工作,我只需在测试文件的第一行添加一个
require
chai

let chai = require('chai');
现在测试在控制台中运行良好,但当我在浏览器中执行测试时,它告诉我
require
未定义的

我知道,这些错误在这里完全有道理!它们是未定义的。但是有没有办法用
mocha
chai
编写测试,并让它们在浏览器和控制台中执行


我知道我可以为浏览器和控制台创建两个测试文件。但这很难维持。所以我想编写一个测试文件,在两种环境中都能正确执行…

我现在自己找到了一个解决方案。需要为
chai
使用配置文件。就像在我的例子中一样,我称它为
chaiconf.js
。在此文件中可以写入默认设置
chai
。每次测试前都需要此文件

My
chaiconf.js

let chai = require("chai");

// print stack trace on assertion errors
chai.config.includeStack = true;

// register globals
global.AssertionError = chai.AssertionError;
global.Assertion = chai.Assertion;
global.expect = chai.expect;
global.assert = chai.assert;

// enable should style
chai.should();
现在将此配置附加到每个测试中。为此,在
package.json
中创建一个脚本条目:

"scripts": {
  "test": "mocha --require chaiconf.js"
},
现在,无论何时在console中使用
npm test
,测试前都需要
chaiconf.js
,并使
chai
全局可用,就像在浏览器中一样


没有配置文件的另一种方法是使用内联决策来接收
chai

let globChai = typeof require === 'undefined' ? chai : require('chai');
let globChai = typeof require === 'undefined' ? chai : require('chai');