2017-01-08 8 views
4

나는 Jest에서 수동 모의를 알아 내려고하고있다. 나는 이것이 쉬워야한다고 생각한다. 그러나 그렇지 않다.유태인의 수동 모의

내 프로젝트 디렉토리

  • __tests__
    • 처럼
      • 의 user.js
    • 모델 사용자 test.js 있습니다
    • __mocks__ 개
      • 의 user.js
  • node_modules
    • ...
  • package.json

모델 /의 user.js 및 모델 모두/__ mocks__ /user.js의 코드는 다음과 같습니다.

module.exports = { 
    create(username, password) { 
     return new Promise(function(resolve, reject) { 
      setTimeout(function() { 
       resolve({"username":username, "password": password}); 
      }, 100); 
     }); 
    } 
} 

파일 __tests __/사용자 test.js 6,은 다음과 같다 : 이것은 잘 작동

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"); 
}); 

은 '아무튼 t 일하고 침을 뱉어 낸다 :

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) 

답변

9

Ah! 그것을 알아 냈어! 내 폴더 구조는 괜찮습니다. 실제로 "jest.mock"이 실제로 무엇을했는지에 대한 오해가있었습니다. "jest.mock"은 모의 (mock)을 사용하기 위해 노드 "require"함수의 동작을 변경합니다. 요구 자체를 수행하지는 않습니다.

내 시험처럼 보였다해야 :

jest.mock('../models/user'); 
test('user creation works',() => { 
    const user = require('../models/user'); 
    return user.create("mitchell", "boo"); 
});