Существует два предостережения:
Если вы используете синтаксис es6 import
для импорта массива relatedServicesList
, оценка (window.location.host === 'stage' ? '/demo' : '/test'
) перед изменением значения window.location
. Мы можем использовать require
для обработки этого.
Вам необходимо использовать jest.resetModules () для сброса реестра модулей - кеша всех необходимых модулей. Так что для каждого теста будет новая оценка.
Вот рабочий пример: index.ts
:
interface IRelatedServiceItem {
label: string;
link: string;
}
console.log('window.location.host: ', window.location.host);
export const relatedServicesList: IRelatedServiceItem[] = [
{
label: 'inquiry.title',
link: '/adc/declaration/landing',
},
{
label: 'extendDeposit.title',
link: '/adc/extend-deposit/landing',
},
{
label: 'generalAdminCustomsServices.landing.title',
link: window.location.host === 'stage' ? '/demo' : '/test',
},
];
index.spec.ts
:
describe('59698218', () => {
beforeEach(() => {
jest.resetModules();
});
it('when host = stage', () => {
Object.defineProperty(window, 'location', {
value: { host: 'stage' },
writable: true,
});
const { relatedServicesList } = require('./index');
expect(relatedServicesList[relatedServicesList.length - 1]).toEqual({
label: 'generalAdminCustomsServices.landing.title',
link: '/demo',
});
});
it('when host != stage', () => {
Object.defineProperty(window, 'location', {
value: { host: 'demo' },
writable: true,
});
const { relatedServicesList } = require('./index');
expect(relatedServicesList[relatedServicesList.length - 1]).toEqual({
label: 'generalAdminCustomsServices.landing.title',
link: '/test',
});
});
});
Результаты модульного тестирования со 100% покрытием:
PASS src/stackoverflow/59698218/index.spec.ts (8.497s)
59698218
✓ when host = stage (14ms)
✓ when host != stage (2ms)
console.log src/stackoverflow/59698218/index.ts:107
window.location.host: stage
console.log src/stackoverflow/59698218/index.ts:107
window.location.host: demo
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 9.649s
Исходный код: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59698218