0

UserMock以下に示すクラス内の特定のメソッドが呼び出されたことを確認する必要があります。テスト中のデフォルトの動作を防ぐために、別のモジュールに挿入するためにこのモック バージョンを作成しました。

を既に使用していsinon.jsますが、 などのメソッドにアクセスisValid()してスパイ/スタブに置き換えるにはどうすればよいですか? クラスをインスタンス化せずにこれを行うことは可能ですか?

var UserMock = (function() {
  var User;
  User = function() {};
  User.prototype.isValid = function() {};
  return User;
})();

ありがとうございました

4

1 に答える 1

3
var UserMock = (function() {
  var User;
  User = function() {};
  User.prototype.isValid = function() {};
  return User;
})();

単純にprototype

(function(_old) {
    UserMock.prototype.isValid = function() {
        // my spy stuff
        return _old.apply(this, arguments); // Make sure to call the old method without anyone noticing 
    }
})(UserMock.prototype.isValid);

説明:

(function(_old) {

})(UserMock.prototype.isValid);

isValue変数へのメソッドへの参照を作成します_old。変数で親スコープをプルしないように、クロージャーが作成されます。

UserMock.prototype.isValid = function() {

プロトタイプメソッドを再宣言します

return _old.apply(this, arguments); // Make sure to call the old method without anyone noticing 

古いメソッドを呼び出し、その結果を返します。

thisapply を使用すると、関数に渡されたすべての引数を正しいスコープ ( ) に入れることができます
。簡単な関数を作って適用すると。

function a(a, b, c) {
   console.log(this, a, b, c);
}

//a.apply(scope, args[]);
a.apply({a: 1}, [1, 2, 3]);

a(); // {a: 1}, 1, 2, 3
于 2012-11-14T16:53:10.407 に答える