javascriptファイルにメソッドがあります。ジャスミン:ジャスミンを使用して別の関数から呼び出される関数をテストする
function foo() {
setTimeout(function() {
bar.getSomeUrl();
},WAIT_FOR_SOMETIME);
}
ここで、getSomeUrl()
は以下のように実装されています。
var bar = {
getSomeUrl : function(){
window.location.href = 'someUrl';
return;
},
anotherProp : function() {
return bar.getSomeUrl();
}
};
私はfoo()
メソッドを呼び出したときgetSomeUrl()
メソッドが呼び出されることをテストしようとしています。
私は試験にジャスミンを使用しています。私のジャスミンテストは以下の通りです:
describe('This tests getSomeUrl()', function() {
it('is called when foo() is called', function(){
spyOn(bar,'getSomeUrl').and.callFake(function(){});
window.foo();
expect(bar.getSomeUrl).toHaveBeenCalled();
});
});
私はそのための別のテストを持っているので、私は本当にgetSomeUrl()
内部で起こっていただきましテストを気にしないでください。
私がテストしようとしているのは、私がfoo()をどこかから呼び出すときに、getSomeUrl()
が呼び出されることです。
- 私はこの方法を行う場合、テストは失敗し、すべてのテストを実行しているの終わりに、ブラウザが
someUrl
にリダイレクト:は、私は次のような問題があります。私は
bar.getSomeUrl()
のスパイを持っていたので、window.foo()
と呼んだときにfake method
を返していたので、実際にはbar.getSomeUrl()
を呼ぶことはなかったので、私はこれが起こるとは思わなかった。 は、だから私は、私は以下のようにそれを行う必要があるかもしれ考えた:
)((window.foo)は.toHaveBeenCalled期待します。
私はbar.getSomeUrl()
が呼び出されていることをテストしようとしていますので、これは、意味がありません。私はこれをしたとき
はしかし、テストが失敗し、私は以下のエラーが表示されます。
Error: Expected a spy, but got Function.
私もそれが問題を引き起こしているsetTimeout
関数であると考えていたとするfoo()
機能を変更:
function foo() {
bar.getSomeUrl();
};
は、私はジャスミンと協力してきたもの
を変更しませんでしたeとJavascriptは数日間しか使用できず、物事の仕組みを幅広く理解しています。
このテストに合格するための提案や、私が間違っていることに関するポインタも大変ありがたいです。まず
Java関連ではありません。 Javascriptは1つの単語で綴られており、Javaとの関係はありません。 –
それに気をつけました。ありがとう。 – ChillBan123
構文エラーがあります。 'bar.getSomeUrl'はオブジェクトリテラルです(構文が無効です)。それは機能ではありません – Phil