如何在每个案例的基础上使用Jest模拟命名的const导出?

时间:2018-05-18 15:52:51

标签: jestjs

我有一个模块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不导出函数,但是一个对象,这样做是没有意义的,所以它也不起作用。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我最终为常量__mocks__/constants.js创建了一个模拟文件,并在其中需要实际文件:

// __mocks__/constants.js
const actualConstants = require.requireActual('../constants');

export default {
  ...actualConstants,

  aSingleConstant: 'mocked value',
};