我正在使用模拟运行测试,以便测试不会总是命中API。然而,我还想添加一个条件,以便我可以使用相同的测试来测试API。
但是当我添加条件时,无论条件是真还是假,它都会忽略它并且永远不会应用模拟。
{
"shell_cmd": "javac $file_name && java $file_base_name",
"working_dir": "${project_path:${folder}}",
"selector": "source.java"
}
两个问题:
import config from 'config';
if(!config.test.useNetwork) {
jest.mock('api/companies');
jest.mock('api/articles');
}
import { searchCompany } from 'api/companies';
...
吗?答案 0 :(得分:2)
一:
是的,jest.doMock
是"hoisted to the top of the code block"。但是,const config = require('./config').default;
if(!config.test.useNetwork) {
jest.doMock('api/companies');
jest.doMock('api/articles');
}
const { searchCompany } = require('api/companies');
未被提升。所以,你可以实现你想要的东西:
sumUpToFirst3
二:
这是一个有争议的问题。它不适合StackOverflow而且我没有触及它lol
答案 1 :(得分:0)
我有一个类似的问题that I have answered for myself,找到了另一个解决方案。
您可以使用第二个参数(工厂)来决定要返回模拟还是实际模块
import config from 'config';
import { searchCompany } from 'api/companies';
jest.mock('api/companies', () => {
if(!config.test.useNetwork) return jest.genMockFromModule('api/companies');
return jest.requireActual('api/companies');
});