如何模拟另一个文件中的 return 值?
How to mock return value in another file?
我正在用笑话测试一个不断变化的动作文件,但似乎无法弄清楚如何模拟其中的 return 值。
当我在我的测试文件中为模拟模块指定 return 值(参见下面的代码)时,一切正常,但是当我正在测试的模块中调用相同的函数时,它会出现上升为未定义。
#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?
我之前也 运行 了解过这个。
解决方法是,在您的测试中,将 GameStore 要求移动到 beforeEach 块中。
beforeEach(function() {
MissionActions = require('../MissionActions');
GameStore = require(root + 'stores/game/GameStore');
});
我不是 100% 确定这一点,但我相信 mockRegistry 是每个测试的范围。因此,当您在 describe 块内需要它时,它会像您期望的那样模拟它。然后,当您在 beforeEach 中需要 MissionActions 时,它会启动一个新范围。所以它模拟了 MissionActions,然后开始模拟它的依赖项并做了一个全新的 GameStore 模拟。
我正在用笑话测试一个不断变化的动作文件,但似乎无法弄清楚如何模拟其中的 return 值。
当我在我的测试文件中为模拟模块指定 return 值(参见下面的代码)时,一切正常,但是当我正在测试的模块中调用相同的函数时,它会出现上升为未定义。
#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?
我之前也 运行 了解过这个。
解决方法是,在您的测试中,将 GameStore 要求移动到 beforeEach 块中。
beforeEach(function() {
MissionActions = require('../MissionActions');
GameStore = require(root + 'stores/game/GameStore');
});
我不是 100% 确定这一点,但我相信 mockRegistry 是每个测试的范围。因此,当您在 describe 块内需要它时,它会像您期望的那样模拟它。然后,当您在 beforeEach 中需要 MissionActions 时,它会启动一个新范围。所以它模拟了 MissionActions,然后开始模拟它的依赖项并做了一个全新的 GameStore 模拟。