使用jest / sinon模拟require()' d导入的对象

时间:2017-10-06 20:52:48

标签: unit-testing sinon jestjs

这是我的代码:

const Config = require('Config');

export const getPayments = (username: string) => {

  if (username === undefined) {
    throw new Error('username is undefined');
  }

  const envEndpoint = Config.paymentsEndpoint;
  const endpoint: string = `${envEndpoint}/${username}`;

  return fetch(endpoint);
};

我想要模拟的是Config对象。我基本上想拦截需要在我的测试文件中调用并将其替换为具有该paymentsEndpoint值的对象。我正在使用jest,但也有sinon作为嘲笑的选项。

我仍然相当新的单元测试和开玩笑,所以请原谅我使用不正确的术语

1 个答案:

答案 0 :(得分:2)

在之前的测试文件中导入getPayments模块,您可以使用jest.mock来模拟配置模块。

所以它看起来像

/* getPayments.test.js */

jest.mock('Config', () => {
  return { paymentsEndpoint: 'y' }; // return your fake Config obj here
});

import getPayments from './getPayments'; // or whatever the correct file path is

describe(() => {
  [ ... your tests ]
});

以下是jest.mock文档:https://facebook.github.io/jest/docs/en/jest-object.html#jestmockmodulename-factory-options