私はジャスミンを使用しています。以下のように、オブジェクトに特定のメソッドがあるかどうかをテストしたいと思います。
it "should have 'open' method", ->
@xhr = ajax.create()
expect(@xhr).toHaveMethod "open" # I want to test like this!
どうすればテストできますか? ご親切にありがとうございます。
私はジャスミンを使用しています。以下のように、オブジェクトに特定のメソッドがあるかどうかをテストしたいと思います。
it "should have 'open' method", ->
@xhr = ajax.create()
expect(@xhr).toHaveMethod "open" # I want to test like this!
どうすればテストできますか? ご親切にありがとうございます。
@davidは正しく答えました。toBeDefined()
おそらくあなたが望むものです。ただし、それがプロパティではなく関数であることを確認したい場合は、toEqual()
withを使用できますjasmine.any(Function)
。以下に例を示します: http://jsbin.com/eREYACe/1/edit
組み込みの方法はありませんが、これを行うことで目的の結果を得ることができます。
it "should have 'open' method", ->
@xhr = ajax.create()
expect(typeof @xhr.open).toBe("function")
他の回答で提案されているように定義されているかどうかのテストには、合格する場合とそうでない場合があることに注意してください。次の構造を取ると、それはパスし、関数ではありません。
{ open : 1 }
私は試してみます:
it "should have 'open' method", ->
@xhr = ajax.create()
expect(@xhr.open).toBeDefined()
このフィドルを参照してください。
私はこのようにしました。角度の例:
beforeEach(inject(function ($injector) {
service = $injector.get("myService");
}));
it("should have myfunction function", function () {
expect(angular.isFunction(service.myfunction)).toBe(true);
});
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;
}
};
}
私はこの解決策を試しましたが、うまくいきます:
spyOn(@xhr,"open")
関数が開いていない場合、spyig を開始できないため、Error がスローされます。