我在让Jest嘲笑工作时遇到了一些麻烦。
我正在尝试对由request驱动的具有一些异步位的模块进行单元测试。
我目前的理解是:
jest.mock()
方法来模拟整个模块。request.get
,request.post
等,使它们同步并通过在__mocks__/
目录中创建文件来传递特定的响应。__mocks__/
需要/导入时自动锁定模块。request
依赖关系。我想我错过了一些明显的东西。
模块我想测试:
// module.js
import request from 'request'
export default function foo() {
let options = { /* ... */ }
let callback = function (error, response, body) {
if (!error && response.statusCode === 200) {
return /* Response A */
} else {
return /* Response B */
}
}
request.post(options, callback);
}
模拟请求模块:
// __mock__/request.js
function post(options, callback) {
callback(undefined, {statusCode: 200})
}
const request = jest.genMockFromModule('request')
request.post = post
export default request;
模块测试:
// module.spec.js
import foo from './module'
jest.mock('request')
test('should return response A', function () {
expect(foo()).toBe(/* Response A */)
});
当我运行模块测试时,
request
模块似乎没有被模拟,任何人都知道如何嘲笑它以正确测试它?
答案 0 :(得分:-1)
在jest.mock('request')
之前移动import ...
对我有帮助。