我有一个模块constants.js
,它返回多个常量对象:
export const SERVER = {
HOST: 'localhost',
PORT: 8000,
};
export const PATHS = {
LOGIN: '/login',
LOGOUT: '/logout',
};
我正在使用PactJS,为了让我使用Jest进行并行测试,我必须在每个it()
测试用例中使用不同的端口。所以我想更改SERVER.PORT
上的beforeEach()
值。
这是我到目前为止所做的,但是没有用:
beforeEach(() => {
port = getRandomPort();
jest.doMock('./constants', () => ({
SERVER: {
PORT: port,
},
})
});
正在测试的模块,在加载constants.js
时会加载实际值而不是模拟值。所以这不起作用。
我还尝试使用jest.mock()
代替jest.doMock()
并返回模拟函数,因此我可以更改.mockReturnValue()
,但由于constants.js
不导出函数,但是一个对象,这样做是没有意义的,所以它也不起作用。
我怎样才能做到这一点?
答案 0 :(得分:0)
我最终为常量__mocks__/constants.js
创建了一个模拟文件,并在其中需要实际文件:
// __mocks__/constants.js
const actualConstants = require.requireActual('../constants');
export default {
...actualConstants,
aSingleConstant: 'mocked value',
};