2017-10-04 29 views
1

我正在运行测试,因此测试并不总是打到API。然而,我也想添加一个条件,以便我可以使用相同的测试来测试API。有条件地运行测试(有或没有模拟客户端)

但是当我添加一个条件时,它会忽略它,并且不管这个条件是真还是假都不应用模拟。

import config from 'config'; 
if(!config.test.useNetwork) { 
    jest.mock('api/companies'); 
    jest.mock('api/articles'); 
} 

import { searchCompany } from 'api/companies'; 
... 

两个问题:

  1. 任何想法如何添加有条件的嘲笑?我认为嘲笑从来没有申请,因为jest.mock可能需要在任何进口之前被调用?
  2. 通过网络进行测试的惯例是什么?如果我只是使用模拟,我真的只是测试模拟,而不是网络请求代码。但是,如果我不使用嘲笑,我不必要地击中API。

回答

1

一:

是,jest.mock()"hoisted to the top of the code block"。但是,jest.doMock未被悬挂。所以,你可以完成你想要什么这样:

const config = require('./config').default; 
if(!config.test.useNetwork) { 
    jest.doMock('api/companies'); 
    jest.doMock('api/articles'); 
} 

const { searchCompany } = require('api/companies'); 

二:

这是一个有争议的问题。它不适合StackOverflow,我不会触摸它大声笑