我正在通过开玩笑测试动作文件并且似乎无法弄清楚如何模拟其中的返回值。
当我在我的测试文件中为模拟模块指定返回值(参见下面的代码)时,一切正常,但是当我在测试模块中调用相同的函数时,它会显示为未定义。
#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的解释&自动模拟是在模拟模块(在本例中为GameStore)上设置mockReturnValue适用于整个测试,而不仅仅是在测试文件中。
我将如何模拟GameStore.getGame()方法,以便它也适用于MissionActions.js?
答案 0 :(得分:4)
我之前也遇到过这种情况。
修复是,在您的测试中,将GameStore需求移动到beforeEach块中。
beforeEach(function() {
MissionActions = require('../MissionActions');
GameStore = require(root + 'stores/game/GameStore');
});
我对此并不是100%肯定,但我相信mockRegistry的每个测试范围都是如此。因此,当您在describe块内部需要它时,它会像您期望的那样嘲笑它。然后,当您在beforeEach中需要MissionActions时,它会启动一个新范围。所以它嘲弄MissionActions,然后开始嘲笑它的依赖,并做一个全新的GameStore模拟。