次はjavascriptの送信要求(1)のコードです。
ここでは、jasmine(2)を使用してajaxリクエストを嘲笑する方法について説明します。ジャスミンを使用して完了したフェイル遅延オブジェクトをテストする方法
私はサーバーの動作を模擬したいと思います。何か案は?
詳細については、(1)および(2)のコメントを参照してください。
P.S .:
実際には、どちらの場合でも、fakeFunctionの完了オブジェクトと失敗した遅延オブジェクトが呼び出されます。
(1)
submitForm: function() {
// the server execute fail only if message.val() is empty
// and I would like to mock this behaviour in (2)
backendController.submitForm(message.val()).done(this.onSuccess).fail(this.onError);
},
backendController.submitForm = function (message) {
return $.ajax({
url: 'some url',
type: 'POST',
dataType: 'json',
data: {
message: message
}
}).done(function() {
//some code;
});
};
(2)
describe('When Submit button handler fired', function() {
var submitFormSpy,
fakeFunction = function() {
this.done = function() {
return this;
};
this.fail = function() {
return this;
};
return this;
};
beforeEach(function() {
submitFormSpy = spyOn(backendController, 'submitForm').andCallFake(fakeFunction);
});
describe('if the message is empty', function() {
beforeEach(function() {
this.view.$el.find('#message').text('');
this.view.$el.find('form').submit();
});
it('backendController.submitForm and fail Deferred Object should be called', function() {
expect(submitFormSpy).toHaveBeenCalled();
// how should I test that fail Deferred Object is called?
});
});
describe('if the message is not empty', function() {
beforeEach(function() {
this.view.$el.find('#message').text('some text');
this.view.$el.find('form').submit();
});
it('backendController.submitForm should be called and the fail Deferred Object should be not called', function() {
expect(submitFormSpy).toHaveBeenCalled();
// how should I test that fail Deferred Object is not called?
});
});
});
は、はるかに簡単にそれらのテストを行います。ご意見をお寄せいただきありがとうございます。https://github.com/webadvanced/takeCommand – Paul
@Paul実際には '/ webadvanced/takeCommand'をなぜ使うべきか正確に分かりません。なぜなら' $ .ajax'はすでに必要なものを持っているからです。サンプルコードを書いて私に答えることができますか? –
var spy = spyOn(クラス、 "メソッド");actionThatCallsClassMethod(); expect(スパイ).toHaveBeenCalled(); あなたの例から私を助けました。 – Aligned