typescript - Jest mocka ett es6 namngivet importerat objekt
Jag skulle vilja veta hur jag kan imitera ett importerat objekt för att returnera ett falskt värde med Jest.
I det här fallet vill jag åsidosätta standardvärdet för timeout (5000) till 1000 för att krascha min funktion
// config.ts
export const config = {
request: {
timeout: 5000,
},
};
// Test file
import * as config from './config';
describe('Requests', () => {
beforeEach(() => {
jest.mock('./config');
});
afterEach(() => {
jest.resetAllMocks();
});
it('Force timeout value', () => {
jest.mock('./config');
config.request.timeout.mockReturnValueOnce(1000);
expect(config.request.timeout).toEqual(1000); // FAIL: returns 5000 instead of 1000
});
});
Tack!
Svar #1
UPPDATERAT SVAR
I det här fallet måste du använda Require istället för import (ESM).
// config.ts
export const config = {
request: {
timeout: 5000
}
}
Testfilen kommer att se ut så här:
// Test file
describe('greetings', () => {
beforeEach(() => jest.resetModules())
describe('hello', () => {
describe('when the language is set to galician', () => {
it('returns galician for hi', () => {
jest.mock('./config', () => ({ request: { timeout: 1000 } }))
const { request } = require('./config')
expect(request.timeout).toEqual(1000)
})
})
describe('when the language is not set to galician', () => {
it('returns hi', () => {
jest.mock('./config', () => ({ request: { timeout: 2000 } }))
const { request } = require('./config')
expect(request.timeout).toEqual(2000)
})
})
})
})
referens - https://medium.com/trabe/mocking-different-values-for-the-same-module-using-jest-a7b8d358d78b
