0

我正在测试使用放大的代码,当它们都用于被测主题时,我无法验证请求和发布会发生什么。

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']);方法,但这对我没有任何帮助,而且我的论点从未被定义或我所期望的(我不记得确切,我只知道我没有使用这种语法)。

4

1 回答 1

0

因此,我似乎遇到了问题的交集。使用 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');
于 2014-12-10T22:21:07.173 回答