如何监视放大请求并用茉莉花发布?

时间:2014-11-20 05:10:19

标签: javascript unit-testing testing jasmine amplifyjs

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

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 个答案:

答案 0 :(得分: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');