2015-04-22 34 views
1

我正在測試一個動作文件,並且不知道如何嘲笑它的返回值。如何在另一個文件中模擬返回值?

當我在我的測試文件中爲模擬模塊指定返回值(請參閱下面的代碼)時,一切正常,但是當我測試的模塊中調用了相同的函數時,它會以undefined的形式出現。

#MissionActions-test.js 

jest.dontMock('../MissionActions'); 
describe('MissionActions', function() { 
    var GameStore = require(root + 'stores/game/GameStore'); 
    var MissionActions; 

    beforeEach(function() { 
     MissionActions = require('../MissionActions'); 
    }); 

    it('should...', function() { 
     GameStore.getGame.mockReturnValue({test: "test"}); 
     console.log(GameStore.getGame()); // prints {test : "test"} 
     MissionActions.addMissionFromBank(); 
    }); 
}); 

和正在測試的MissionActions.js。

# MissionActions.js 
var GameStore = require('../../stores/game/GameStore'); 

var MissionActions = { 
    addMissionFromBank: function(bankMission) { 
     var game = GameStore.getGame(); 
     console.log(game); // prints undefined 
    } 
} 

module.exports = MissionActions; 

我的API &自動嘲諷的解釋是,一個嘲弄模塊上設置mockReturnValue(在這種情況下GameStore)適用於整個測試,而不僅僅是測試文件中。

我該如何去嘲諷GameStore.getGame()方法,以便它適用於MissionActions.js中?

回答

3

我以前也遇到過這種情況。

修復方法是,在您的測試中,將GameStore需求移到beforeEach塊中。

beforeEach(function() { 
    MissionActions = require('../MissionActions'); 
    GameStore = require(root + 'stores/game/GameStore'); 
}); 

我不是100%確定這一點,但我相信mockRegistry是每個測試的作用域。所以當你需要它在描述塊內時,它會像你期望的那樣嘲笑它。然後,當你在beforeEach裏面需要MissionActions時,它開始一個新的範圍。所以它嘲笑MissionActions,然後開始嘲笑它的依賴關係,並做了一個全新的GameStore模擬。

+0

哇,非常感謝。我不敢相信這很簡單。 –

+0

不,這不簡單。我在測試中遇到了同樣的問題。如果你使用進口巴貝爾這個東西是一個殺手。在我看來,Jest在文檔中缺少很多細節。無論如何@Crob良好的迴應。 – Mihai

相關問題