使用JEST测试快递路线

Aw3*_*Sol 6 unit-testing express jestjs

我想用JEST测试我的Express API端点。

以下是我的Express API代码。

routs.ts

// Get release notes
routes.get('/release-notes', (req, res) => {
  request.get({
    url: 'https://host.com/rest/api/content/search?cql=parent=209266565',
    json: true
  })
    .pipe(res);
});

export default routes;
Run Code Online (Sandbox Code Playgroud)

上面的代码将返回数据,但是我想用Mock来测试API,而无需发出API请求

因此,我手动创建了一个模拟响应,并需要使用它来验证代码。

模拟

export const releaseNotesMockData = {
  'results': [
    {
      'id': '206169942',
      'type': 'page',
      'status': 'current',
      'title': 'Release 2018-10-18 Full Flow CM00294965',
    }]
};
Run Code Online (Sandbox Code Playgroud)

使用以下代码,我找到了真正的API,测试通过了

describe('Test a 200', () => {
    test('It should respond with a 200 status', async () => {
      const response = await request(app).get('/release-notes');
      expect(response.statusCode).toBe(200);
    });
  });
Run Code Online (Sandbox Code Playgroud)

问题是,我不想使用真正的API进行测试,而是想使用Mocks进行测试。

下面是我尝试过的代码,它没有用。请帮忙

routs.test.ts

describe('api test', () => {
  const url = '/release-notes';
  it('user GET should be 200', async () => {
    const result = await http({
      url,
      method: 'get'
    });
    expect(result).toBe('200');
  });
});
Run Code Online (Sandbox Code Playgroud)

Fra*_*teo 0

问题是您没有嘲笑request您正在导入的模块。

有关模拟的详细信息,请参阅https://jestjs.io/docs/en/tutorial-async 。