我在下面有以下代碼,它根據 NODE_ENV 回傳某些資料:
配置.js
export const Config = (() => {
let data;
switch (process.env.NODE_ENV) {
case 'development':
data = '123';
break;
case 'production':
data = '456'
break;
default:
break;
}
return {
data
};
})();
當我設定 NODE_ENV 時,這在我的組件中運行良好。然而,在我的測驗中,我不斷得到未定義的結果。
config.test.js
describe('Config', () => {
test('returns correct data if NODE_ENV is development', () => {
process.env = { ...process.env, NODE_ENV: 'development' };
expect(Config.data).toBe('123'); // returns undefined, expected '123'
});
test('returns correct data if NODE_ENV is production', () => {
process.env = { ...process.env, NODE_ENV: 'production' };
expect(Config.data).toBe('456'); // returns undefined, expected '456'
});
});
同樣,Config.data當我啟動它時,它在我的 React 組件中作業正常,但我想我需要以某種方式初始化它才能在我的測驗中作業?任何意見,將不勝感激!
uj5u.com熱心網友回復:
首先,您需要確保config在設定process.env. 所以你需要使用const { Config } = require('./config')而不是import { Config } from './config';因為 匯入被提升,并且當 IIFE 執行時,process.env沒有準備好。
另一個注意事項是模塊快取。
模塊在第一次加載后被快取。這意味著(除其他外)每次呼叫都
require('foo')將回傳完全相同的物件,如果它會決議為同一個檔案。
如果
require.cache不修改,多次呼叫require('foo')不會導致模塊代碼被多次執行。這是一個重要的特點。有了它,可以回傳“部分完成”的物件,從而允許加載傳遞依賴項,即使它們會導致回圈。
您的配置模塊中有一個 IIFE,它只會在您require('./config')多次執行時執行一次。process.envIIFE 中的值也被快取。因此,您需要使用jest.resetModules()來清除模塊快取。
例如
config.js:
export const Config = (() => {
let data;
console.log(process.env.NODE_ENV);
switch (process.env.NODE_ENV) {
case 'development':
data = '123';
break;
case 'production':
data = '456';
break;
default:
break;
}
return { data };
})();
config.test.js:
describe('Config', () => {
let Config;
beforeEach(() => {
jest.resetModules();
});
test('returns correct data if NODE_ENV is development', () => {
process.env = { ...process.env, NODE_ENV: 'development' };
Config = require('./config').Config;
expect(Config.data).toBe('123');
});
test('returns correct data if NODE_ENV is production', () => {
process.env = { ...process.env, NODE_ENV: 'production' };
Config = require('./config').Config;
expect(Config.data).toBe('456');
});
});
測驗結果:
PASS stackoverflow/71733750/config.test.ts
Config
? returns correct data if NODE_ENV is development (15 ms)
? returns correct data if NODE_ENV is production (2 ms)
console.log
development
at stackoverflow/71733750/config.ts:29:11
console.log
production
at stackoverflow/71733750/config.ts:29:11
-----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
config.ts | 100 | 100 | 100 | 100 |
-----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 1.354 s
您可以嘗試洗掉jest.resetModules()以檢查日志。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/457271.html
標籤:javascript 单元测试 测试 开玩笑的
上一篇:Vue計算的JEST單元測驗
下一篇:如何忽略/模擬Slf4j日志行?
