![](/img/trans.png)
[英]How can I run a global setup script before any mocha test in watch mode
[英]Mocha: How Can I Structure Things to Run Setup Code *Before* App Code Loads?
TLDR:有什么方法可以在加載應用程序代碼之前(而不只是在運行測試代碼之前)運行Mocha測試設置代碼,而不必在每個測試文件中導入該設置代碼?
背景:
我有一個要與Mocha一起測試的客戶端應用程序。 該應用程序中我的一個模塊執行了以下操作:
// foo.js
const initialReduxState = { currentLocation: window.location };
問題是,在測試環境中不存在window
,因此我必須為測試模擬一個:
// testSetup.js
before(() => {
const { window } = new JSDOM(`...`);
global.window = window;
});
但是,如果我像before
那樣實際使用before
,它將無法工作,因為將加載testSetup代碼,然后將加載應用程序代碼(需要window
),然后測試設置中的before
將運行(為時已晚)。
因此,我最終將其直接添加到“主測試加載器”文件中,而沒有之前:
// masterTestLoader.js
const { window } = new JSDOM(`...`);
beforeEach(() => {
global.window = window;
});
import 'fooTest';
但是,如果這樣做,我只能運行整個套件。 我無法運行單個測試文件。 因此,我改為返回一個testSetup.js
文件,刪除了before
,並開始在測試中導入testSetup.js
:
// fooTest.js
import 'testSetup'; run this first to create window
import 'foo'; // uses window
testSomething();
但缺點是我必須在每個測試文件中明確包含testSetup.js
。
我還嘗試使用mocha --require
命令行選項來要求testSetup
(而不必在每個測試文件中都需要它)……但是事實證明,以這種方式加載的文件沒有Mocha全局變量(例如beforeEach
) 。
我的問題是,有什么辦法可以做到兩全其美嗎? 換句話說,有什么方法可以確保Mocha測試的某些代碼不僅在測試代碼之前運行,還可以在應用程序代碼之前運行,而無需在每個測試文件中明確導入該代碼?
您可以像這樣調用mocha:
mocha --require testSetup.js
其中testSetup.js
包含要在實際測試加載之前運行的所有內容。
或者,你可以創建一個mocha.opts
旁邊的文件package.json
包含--require testSetup.js
,它會自動在每個測試運行加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.