24

私はジャスミンを使用しています。以下のように、オブジェクトに特定のメソッドがあるかどうかをテストしたいと思います。

it "should have 'open' method", ->
    @xhr = ajax.create()
    expect(@xhr).toHaveMethod "open" # I want to test like this!

どうすればテストできますか? ご親切にありがとうございます。

4

6 に答える 6

31

@davidは正しく答えました。toBeDefined()おそらくあなたが望むものです。ただし、それがプロパティではなく関数であることを確認したい場合は、toEqual()withを使用できますjasmine.any(Function)。以下に例を示します: http://jsbin.com/eREYACe/1/edit

于 2013-09-10T14:28:04.573 に答える
25

組み込みの方法はありませんが、これを行うことで目的の結果を得ることができます。

it "should have 'open' method", ->
    @xhr = ajax.create()
    expect(typeof @xhr.open).toBe("function")

他の回答で提案されているように定義されているかどうかのテストには、合格する場合とそうでない場合があることに注意してください。次の構造を取ると、それはパスし、関数ではありません。

{ open : 1 }
于 2013-03-28T14:52:08.970 に答える
11

私は試してみます:

it "should have 'open' method", ->
    @xhr = ajax.create()
    expect(@xhr.open).toBeDefined()

このフィドルを参照してください。

于 2013-03-28T08:09:01.573 に答える
2

私はこのようにしました。角度の例:

beforeEach(inject(function ($injector) {
    service = $injector.get("myService");       
}));

it("should have myfunction function", function () {
    expect(angular.isFunction(service.myfunction)).toBe(true);
});
于 2016-09-20T09:14:18.950 に答える
0

Jasmine では、独自の「マッチャー」を作成できます。ドキュメントはそれを説明しています。 http://jasmine.github.io/2.0/custom_matcher.html

と呼ばれる非常に具体的なマッチャーを書くことができます

expect(obj).toHaveMethod("methodName");

個人的には、値の型をチェックするもう少し一般的なものを書きます。そうすれば、メソッドがオブジェクト/インスタンスで定義されているかどうかを確認するだけでなく、値を格納できるものすべてを確認するために使用できます。また、関数型以外の型をチェックする可能性も与えてくれます。

expect(obj.methodName).toBeA(Function);

それを機能させるには、toBeA「マッチャー」を必ず追加する必要があります。

beforeEach(function(){
    jasmine.addMatchers({
      toBeA: toBeA
    });
});


function toBeA() {
  return {
    compare: function (value, type) {
      var result = {pass: val != null && val.constructor === type || val instanceof type};

      if (result.pass) {
        result.message = 'Expected ' + value + ' to be a ' + type.name
      } else {
        result.message = 'Expected ' + value + ' to not be a ' + type.name
      }

      return result;
    }
  };
}
于 2016-05-01T19:00:41.303 に答える
-1

私はこの解決策を試しましたが、うまくいきます:

spyOn(@xhr,"open")

関数が開いていない場合、spyig を開始できないため、Error がスローされます。

于 2015-09-09T15:24:23.533 に答える