8

起動していない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();

これは失敗します

「fooz」は「foo」と等しいと予想されます。

しかし、引数をに変更'fooz'すると、テストは失敗します'foo'andReturn

submitRequest のスパイが呼び出されることが予想されます。

スパイは既定の値を返しているのに、なぜtoHaveBeenCalled失敗するのでしょうか?

4

2 に答える 2

1

私はこれが解決策ではないことを知っていますが、あなたは試しましたか

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

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

expect(submitSpy).toHaveBeenCalled();

時々これはより一貫して機能するので

于 2012-06-20T13:10:10.070 に答える
1

コードが機能するはずです。ジャスミンのスタンドアロンの例でテストしました:

it("tells the current song if the user has made it a favorite", function() {
  spyOn(song, 'persistFavoriteStatus').andReturn('foo');
  var ret = song.persistFavoriteStatus();
  expect(ret).toEqual('foo');

  expect(song.persistFavoriteStatus).toHaveBeenCalled();
});

あなたが経験している問題は、Jasmine の呼び出し前/呼び出し後のスコープに関係していると私は直感しています。私自身、そのようなイライラするケースに遭遇しました。テストの最初に、環境が期待どおりであることを確認します (たとえば、スパイがリセットされます)。

于 2012-07-06T09:52:14.727 に答える