2017-03-17 46 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'); 
相關問題