2015-04-21 4 views
0

Я пытаюсь выяснить, как тестировать действия в потоке. Магазины достаточно просты с provided example, но, похоже, ничего не происходит для слоя action/data/api.Как проверить действия в Flux/React?

В моем конкретном приложении мне нужно предварительно обработать что-то, прежде чем отправлять его на свой сервер. Основываясь на рекомендации в this post, я решил реализовать асинхронные вещи в своих действиях. Я не могу понять, как проверить эту предварительную обработку.

Например, в 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. Какие-либо предложения?

ответ

3

Вы используете диспетчер потока или требующее AppDataController? Jest автоматически издевается над модулями, которые вы вводите через запрос браузера. Если вы импортируете 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()); 
    }); 
}); 

вы хотите назвать не-издевались метод, Youre тестирование и проверить, что макет называется. чтобы проверить, если его называют вообще использовать

#toBeCalled() 

или если вы хотите, чтобы проверить, что его называют с определенным значением (например, проверить, что его называют с тем, что миссия оценивает) использовать

#toBeCalledWith(value) 
+0

ожидать (модуль) .toBeCalledWith (correctMission) - это то, что я искал. Благодаря! –

0

Вы можете сделать mock/spyOn AppDataController и проверить, что он получает правильный объект миссии. Нечто подобное в жасмине, я не уверен, что это то же самое в шутке:

spyOn(AppDataController, 'addMissionFromBank'); 
MissionActions.addMissionFromBank(someBankMission); 
expect(AppDataController.addMissionFromBank).toHaveBeenCalledWith(expectedMission); 
+0

Спасибо за предложение, не встретили ничего похожего на spyOn еще в Jest, но я буду искать его. –

Смежные вопросы