Как шпионить за уточняющим запросом и публиковать с жасмином?

Я тестирую код, который использует 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');
Другие вопросы по тегам