私はいくつかのジャスミン テストを作成し、mockjax を使用して ajax 呼び出しをモックしています。ジャスミンを非同期で動作させるには追加の作業が必要であることは知っていますが、私のソリューションは好きではありません。
' ' を実際の実装に渡しdone
、ajax リクエストの promise 内からこれを呼び出しています。
すべての例は、setTimeouts を「シミュレーション」として使用しているように見えますが、これは私の意見では完全には役に立ちません。
理解に役立つコードを次に示します。
ジャスミン
$.mockjax({
url: "*/api/AdminBenefits",
contentType: "application/json",
type: "post"
});
beforeEach(function (done)
{
vm.benefit.benefitName(expectedBenefitName);
vm.addBenefit(done); <---- Dirty
});
//Assert
it('should toast success', function (done)
{
expect(fakeToastr.successValue()).toEqual('"' + expectedBenefitName + '"' + " was added successfully.");
done();
});
実装
model.addBenefit = function(callback) <---- Dirty
{
var value = model.benefit.benefitName();
$.ajax({
url: rootPath + "/api/AdminBenefit",
dataType: "text",
contentType: "application/json",
type: "post",
data: ko.toJSON(model.benefit)
}).done(function(data) {
toastr.success("\"" + value + "\"" + " was added successfully.");
!callback || callback(); <---- Dirty
}).fail(function() {
!callback || callback(); <---- Dirty
});
}
私はこれについてすべて間違っていますか?
繰り返しますが、ジャスミンからビューモデルに渡さずに、mockjax / ajax が .done() であることをジャスミンに知らせたいと思いdone
ます。