1

バックボーンのView初期化メソッドでメソッドを実行します。

initialize : function(options) {
      this.myMethod();
   }

私は次のようなシノンを使用してこのメ​​ソッドをスパイしようとしています:

this.spyMyMethod = sinon.spy(this.view, "myMethod");

その後終了

it('should call my method', function(){
  expect(this.spyMyMethod).toHaveBeenCalledOnce();
});

しかし、テストは失敗します...

何か案は?

4

2 に答える 2

3

メソッドをスパイするのが遅すぎます。

あなたが割り当てている場所はどこでもthis.view、のような呼び出しからのものだと思いnew Views.SomeView()ます。関数を実行さnewせるのはその呼び出しです。initialize

アップデート

これは非常に面倒なのであまりお勧めしませんが、次のようなことができる可能性があります: (私はシノンを知りませんが、これはベースのジャスミンスパイオブジェクトで行う方法です)

it('should call my method', function(){
  var dummyView = new Views.SomeView();
  spyOn(dummyView, "myMethod");
  spyOn(Views, "SomeView").andCallFake(function () {
    dummyView.initialize();
    return dummyView;
  });
  new Views.SomeView();
  expect(dummyView.myMethod).toHaveBeenCalled();
});

別の可能性

以下のようなスパイでそのメソッドをオーバーライドできるようです。それが機能する場合、これがおそらく最もクリーンな方法です。

it('should call my method', function(){
  spyOn(Views.SomeView.prototype, "myMethod");
  new Views.SomeView();
  expect(Views.SomeView.prototype.myMethod).toHaveBeenCalled();
});
于 2012-11-26T21:51:41.993 に答える
0

呼び出すinitializeメソッドについては、ビューの新しいインスタンスを返す必要があります。

this.view = new View();かどうかはわかりません。すでにしかし

于 2012-11-26T21:39:16.293 に答える