0

我试图弄清楚如何测试不断变化的动作。使用提供的示例,商店很简单,但是对于操作/数据/api 层似乎没有任何内容。

在我的特定应用程序中,我需要在将某些内容发布到我的服务器之前对其进行预处理。根据这篇文章中的建议,我决定在我的操作中实现异步内容。我不知道如何测试这种预处理。

例如在 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 组件的示例。有什么建议么?

4

2 回答 2

3

您是在使用通量调度程序还是需要 AppDataController?Jest 将自动模拟您通过 browserify 的 require 引入的模块。如果您通过 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());
  });
});

您想调用您正在测试的非模拟方法并检查是否调用了模拟。检查它是否被调用

#toBeCalled()

或者如果您想检查它是否使用特定值调用(例如,检查它是否使用任何任务评估的调用)使用

#toBeCalledWith(value) 
于 2015-04-22T01:58:28.850 回答
0

您可以模拟/监视 AppDataController,并检查它是否接收到正确的任务对象。茉莉花中有这样的东西,我不确定它是否是一样的玩笑:

spyOn(AppDataController, 'addMissionFromBank');
MissionActions.addMissionFromBank(someBankMission);
expect(AppDataController.addMissionFromBank).toHaveBeenCalledWith(expectedMission);
于 2015-04-21T14:48:42.133 回答