2017-10-04 52 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,我不會觸摸它大聲笑