可以 运行 在单个测试文件中在控制台和浏览器中使用 chai 进行 mocha 测试吗?
Possible to run mocha test with chai in console and browser within a single test file?
我已经为一个项目设置了一个小的测试环境。它应该使用 mocha
和 chai
进行单元测试。我已经设置了一个 html
文件作为测试 运行ner:
<!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>
chaiTest.js
文件继续这个简单的测试:
let assert = chai.assert;
describe('simple test', () => {
it('should be equal', () => {
assert.equal(1, 1);
});
});
当我现在在浏览器中调用测试 运行ner 时,结果显示正确。它工作正常。但是当我在控制台上 运行 mocha
时,它告诉我 chai is not defined
.
所以为了让它在控制台中工作,我只需在测试文件的第一行添加 require
of chai
。
let chai = require('chai');
现在在控制台中测试 运行 没问题,但是当我在浏览器中执行测试时,它告诉我 require
是 undefined
。
我知道,这些错误在这里完全有道理!它们是未定义的。但是有没有办法用 mocha
和 chai
编写测试并让它们在浏览器和控制台中执行?
我知道我可以为浏览器和控制台创建两个测试文件。但这很难维持。所以我想写一个测试文件,在两个环境中都能正确执行...
我现在自己找到了解决办法。 chai
需要使用配置文件。就像我的情况一样,我将其称为 chaiconf.js
。在这个文件中可以写入 chai
的默认设置。每次测试前都需要此文件。
我的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"
},
现在,每当您在控制台中使用 npm test
时,在测试之前都需要 chaiconf.js
并使 chai
全局可用,就像在浏览器中一样。
没有配置文件的另一种方法是使用内联决定来接收 chai
:
let globChai = typeof require === 'undefined' ? chai : require('chai');
我已经为一个项目设置了一个小的测试环境。它应该使用 mocha
和 chai
进行单元测试。我已经设置了一个 html
文件作为测试 运行ner:
<!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>
chaiTest.js
文件继续这个简单的测试:
let assert = chai.assert;
describe('simple test', () => {
it('should be equal', () => {
assert.equal(1, 1);
});
});
当我现在在浏览器中调用测试 运行ner 时,结果显示正确。它工作正常。但是当我在控制台上 运行 mocha
时,它告诉我 chai is not defined
.
所以为了让它在控制台中工作,我只需在测试文件的第一行添加 require
of chai
。
let chai = require('chai');
现在在控制台中测试 运行 没问题,但是当我在浏览器中执行测试时,它告诉我 require
是 undefined
。
我知道,这些错误在这里完全有道理!它们是未定义的。但是有没有办法用 mocha
和 chai
编写测试并让它们在浏览器和控制台中执行?
我知道我可以为浏览器和控制台创建两个测试文件。但这很难维持。所以我想写一个测试文件,在两个环境中都能正确执行...
我现在自己找到了解决办法。 chai
需要使用配置文件。就像我的情况一样,我将其称为 chaiconf.js
。在这个文件中可以写入 chai
的默认设置。每次测试前都需要此文件。
我的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"
},
现在,每当您在控制台中使用 npm test
时,在测试之前都需要 chaiconf.js
并使 chai
全局可用,就像在浏览器中一样。
没有配置文件的另一种方法是使用内联决定来接收 chai
:
let globChai = typeof require === 'undefined' ? chai : require('chai');