Как шпионить за уточняющим запросом и публиковать с жасмином?
Я тестирую код, который использует ampify, у меня возникают проблемы с проверкой того, что происходит с запросом и публикацией, когда они оба используются в тестируемом предмете.
it("should put an updated entity on save", function () {
spyOn(amplify, 'publish');
spyOn(amplify, 'request');
viewModel.save();
expect(amplify.publish.argsForCall).toEqual([['foo']]);
expect(amplify.request.argsForCall).toEqual([['bar']]);
});
Как бы я ни построил тест таким способом argsForCall
на одном из них всегда заканчивается как undefined
,
В аналогичном тесте:
spyOn(amplify, 'request');
spyOn(amplify, 'publish');
viewModel.cancel();
expect(amplify.request).not.toHaveBeenCalled();
expect(amplify.publish.mostRecentCall.args).toEqual(['baz']);
У меня нет проблем с многократным использованием spyOn. Однако, похоже, что запись аргументов фиксируется в одной функции?
Как я могу проверить эти действия?
Я попробовал что-то вроде jasmine.createSpyObj('amplify', ['request', 'publish']);
но это не помогло мне вообще, и мои аргументы никогда не были определены или что я ожидал (я точно не помню, я просто знаю, что не получил, где с этим синтаксисом).
1 ответ
Так что, похоже, я страдал от пересечения вопросов. Используя Karma, версия Jasmine, на которой он основан, использует Jasmine 1.x, а страница документации была 2.x Мои потребности действительно вращались вокруг andCallThrough()
Код, относящийся к 1.x
spyOn(amplify, 'publish').andCallThrough();
spyOn(amplify, 'request');
viewModel.save();
expect(amplify.publish.calls[0].args).toEqual(['event-1']);
expect(amplify.publish.calls[1].args).toEqual(['event-2']);
expect(amplify.request.mostRecentCall.args[0].resourceId)
.toEqual('my-resource-id-value');
Соответствующий код 2.x (не проверено)
spyOn(amplify, 'publish').and.callThrough();
spyOn(amplify, 'request');
viewModel.save();
expect(amplify.publish.calls.argsFor(0)).toEqual(['event-1']);
expect(amplify.publish.calls.argsFor(1)).toEqual(['event-2']);
expect(amplify.request.calls.mostRecent().args[0].resourceId)
.toEqual('my-resource-id-value');