私はジェストの手動モックを理解しようとしています。これは簡単だと思いますが、簡単ではありません。
私のプロジェクトディレクトリは
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)
ああ!理解した!私のフォルダ構造は問題ありません。 「jest.mock」が実際に何をしたかについて、私は誤解していることがわかりました。 "jest.mock"はノードの "require"関数の動作をモックを使用するように変更します。それ自体はrequireを行いません。
私のテストは次のようになるはずです:
jest.mock('../models/user');
test('user creation works', () => {
const user = require('../models/user');
return user.create("mitchell", "boo");
});