为什么一个Jasmine间谍认为它没有被召唤,即使它返回了andReturn值?

Gre*_*con 8 javascript unit-testing jasmine

我正在尝试调试没有触发的jQuery.post上的间谍,所以作为一个完整性检查,我试过

spyOn(this.viewModel.requests, 'submitRequest').andReturn('fooz');

var ret = this.viewModel.requests.submitRequest();
expect(ret).toEqual('foo');

expect(this.viewModel.requests.submitRequest).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)

这失败了

期待'fooz'等于'foo'.

但是,当我改变'fooz',以'foo'在参数andReturn,测试失败

已经调用了submitRequest上的预期间谍.

间谍正在返回固定值,为什么会toHaveBeenCalled失败?

Nic*_*tti 1

我知道这不应该是解决方案,但你尝试过吗

var submitSpy = spyOn(this.viewModel.requests, 'submitRequest').andReturn('foo');

var ret = this.viewModel.requests.submitRequest();
expect(ret).toEqual('foo');

expect(submitSpy).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)

因为有时这会更一致