我正在测试使用放大的代码,我无法验证请求和发布时会发生什么,当它们都在被测试对象中使用时。
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']);
的东西,但这根本没有帮助我,我的论点从未被定义或我的预期(我不记得确切,我只知道我没有用这种语法在哪里)。
答案 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');