簡體   English   中英

Mocha:我如何構造要在安裝應用程序代碼之前運行安裝代碼的內容?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM