2017-03-17 50 views
0

我已经为一个项目设置了一个小测试环境。它应该使用mochachai进行单元测试。我已经成立了一个html文件作为测试运行:可能在单个测试文件中使用控制台和浏览器中的chai运行摩卡测试?

<!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文件continas这个简单的测试:

let assert = chai.assert; 

describe('simple test',() => { 
    it('should be equal',() => { 
     assert.equal(1, 1); 
    }); 
}); 

当我现在请我的浏览器测试运行,结果正确显示。它工作正常。但是当我在控制台上运行mocha时,它告诉我chai is not defined

所以要在控制台中使用这个工具,我只需在测试文件的第一行添加的require

let chai = require('chai'); 

现在的测试运行在控制台很好,但是当我在浏览器中执行测试,它告诉我,requireundefined

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

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

回答

1

我现在自己找到了一个解决方案。需要使用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'); 
相关问题