我想通过扩展默认mock的行为并在执行以下测试时将其恢复为原始实现来更改每个测试基础上的模拟依赖项的实现.
更简单地说,这就是我想要实现的目标:
我正在使用Jest v21
.
以下是典型的Jest测试:
__mocks__/myModule.js
const myMockedModule = jest.genMockFromModule('../myModule');
myMockedModule.a = jest.fn(() => true);
myMockedModule.b = jest.fn(() => true);
export default myMockedModule;
Run Code Online (Sandbox Code Playgroud)
__tests__/myTest.js
import myMockedModule from '../myModule';
// Mock myModule
jest.mock('../myModule');
beforeEach(() => {
jest.clearAllMocks();
});
describe('MyTest', () => {
it('should test with default mock', () => {
myMockedModule.a(); // === true
myMockedModule.b(); // === true
});
it('should override …
Run Code Online (Sandbox Code Playgroud) Jest提供了一种模拟函数的方法,如文档中所述
apiGetMethod = jest.fn().mockImplementation(
new Promise((resolve, reject) => {
const userID = parseInt(url.substr('/users/'.length), 10);
process.nextTick(
() => users[userID] ? resolve(users[userID]) : reject({
error: 'User with ' + userID + ' not found.',
});
);
});
);
Run Code Online (Sandbox Code Playgroud)
但是,当在测试中直接调用函数时,这些函数似乎只能工作.
describe('example test', () => {
it('uses the mocked function', () => {
apiGetMethod().then(...);
});
});
Run Code Online (Sandbox Code Playgroud)
如果我有一个如此定义的React组件,我该如何模拟它?
import { apiGetMethod } from './api';
class Foo extends React.Component {
state = {
data: []
}
makeRequest = () => {
apiGetMethod().then(result => {
this.setState({data: result}); …
Run Code Online (Sandbox Code Playgroud)