我正在尝试在Jest中理解手动模拟。我认为这应该很容易...但事实并非如此。
我的项目目录结构如下:
- __tests__
- user-test.js
- models
- user.js
- __mocks__
- user.js
- node_modules
- ...
- package.json
models/user.js和models/__mocks__/user.js都有相同的代码:
module.exports = {
create(username, password) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({"username":username, "password": password});
}, 100);
});
}
}
文件__tests__/user-test.js看起来像这样:
test('user creation works', () => {
const user = require('../models/user');
//const user = jest.mock('../models/user');
return user.create("mitchell", "boo");
});
这个代码可以正常工作,测试通过。但是当我把它改成以下代码时:
test('user creation works', () => {
//const user = require('../models/user');
const user = jest.mock('../models/user');
return user.create("mitchell", "boo");
});
它无法工作,并且会输出:
FAIL __tests__\user-test.js
● user creation works
TypeError: user.create is not a function
at Object.<anonymous>.test (__tests__\user-test.js:4:17)
at process._tickCallback (internal\process\next_tick.js:103:7)