这又是我的一个非常简单的例子。 在简历中,我需要对模拟类有不同的响应。
这是我返回一个对象的简单类
class Producer {
hello() {
return {
message:'Class: Hello',
}
}
}
export default Producer;
这是__mocks__
文件夹中的模拟类
class Producer {
hello() {
return {
message:'__mocks__: hello',
}
}
}
export default Producer;
这是我的测试文件,它按我的预期工作
import Consumer from './Consumer';
jest.mock('./Producer');
test('simple test 1', () => {
let consumer = new Consumer();
consumer.call();
expect(consumer.response.message).toEqual('__mocks__: hello')
console.log(consumer.response)
// prints on console { message: '__mocks__: hello' }
});
我的问题是,对于其他测试,我需要来自模拟文件 Producer
jest.mock('./Producer').updateOnTheFly( hello() {
return {
message:'UPDATE ON FLY: hello',
}
})
test('simple test 1', () => {
let consumer = new Consumer();
consumer.call();
expect(consumer.response.message).toEqual('UPDATE ON FLY: hello')
});
最佳答案
对于这样的事情,不在 __mocks__/Producer.js
创建手动模拟会更容易。
相反,使用 jest.mock('./Producer');
自动模拟模块...
...然后根据需要模拟 Producer.prototype.hello
的返回值:
import Consumer from './Consumer';
import Producer from './Producer';
jest.mock('./Producer'); // <= auto-mock Producer
test('simple test 1', () => {
Producer.prototype.hello.mockReturnValue({ message: 'mocked: hello' });
let consumer = new Consumer();
consumer.call();
expect(consumer.response.message).toEqual('mocked: hello') // Success!
});
test('simple test 2', () => {
Producer.prototype.hello.mockReturnValue({ message: 'UPDATED: hello' });
let consumer = new Consumer();
consumer.call();
expect(consumer.response.message).toEqual('UPDATED: hello') // Success!
});
关于javascript - 开 Jest mock 类(class)强制不同的 react , typescript ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56277436/