我正试图弄清楚如何测试不断变化的动作。使用provided example,商店很简单,但似乎没有动作/ data / api层。
在我的特定应用中,我需要预先处理一些内容,然后再将其发布到我的服务器上。根据{{3}}中的建议,我决定在我的行动中实现异步内容。我无法弄清楚的是如何测试这种预处理。
例如在MissionActions.js中:
addMissionFromBank: function(bankMission) {
var mission = new Mission({game: GameStore.getGame().resource_uri, order: Constants.MISSION_ORDER_BASE_INT}).convertBankMission(bankMission);
var order = MissionSort.calcOrderBySortMethod(mission, MissionStore.getMissions(), GameStore.getGame().sort_method);
mission['order'] = order;
AppDataController.addMissionFromBank(mission);
},
在这个功能中,我将一个库存任务(bankMission)转换为常规任务,并使用正确的订单密钥将其保存到游戏中。然后我将这个新的常规任务发布到我的服务器,其回调在我的MissionStore中处理。
由于这个转换代码很重要,我想为它编写测试,但无法弄清楚如何做,因为似乎只有测试存储和React组件的示例。有什么建议吗?
答案 0 :(得分:3)
您使用的是磁通调度程序还是需要AppDataController? Jest会根据browserify的要求自动模拟您带来的模块。如果您通过require导入AppDataController,那么您的测试可能如下所示:
jest.dontMock('MissionAction.js') // or path/to/MissionAction.js
describe('#addMissionFromBank', function(){
beforeEach(function(){
MissionAction.addMissionFromBank(exampleMission);
});
it('calls AppDataController.addMissionFromBank', function(){
expect(AppDataController.addMissionFromBank).toBeCalled());
});
});
你想要调用你正在测试的非模拟方法并检查是否调用了mock。检查它是否已被使用
#toBeCalled()
或者如果你想检查它是否使用特定值进行调用(例如,检查它是否使用任何任务评估调用)使用
#toBeCalledWith(value)
答案 1 :(得分:0)
你可以模拟/ spyOn AppDataController,并检查它是否收到了正确的任务对象。在茉莉花中有这样的东西,我不确定它是否与开玩笑相同:
spyOn(AppDataController, 'addMissionFromBank');
MissionActions.addMissionFromBank(someBankMission);
expect(AppDataController.addMissionFromBank).toHaveBeenCalledWith(expectedMission);