2017-01-08 8 views
4

Jestのマニュアルモックを解明しようとしています。私はこれが簡単であるべきだと思うが...そうではない。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は、次のようになります。これは正常に動作します

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

それはdoesnの仕事、吐き出し:

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"は、モックを使用するためにノード "require"関数の動作を変更しますが、require自体は行いません。

私のテストは、ように見えているはずです:

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