我正在编写一些 jasmine 测试并使用 mockjax 来模拟我的 ajax 调用。我知道 jasmine 需要一些额外的工作才能使其异步工作,但我不喜欢我的解决方案。
我将 ' done
' 传递到我的实际实现中,然后在我的 ajax 请求的承诺中调用它。
所有示例似乎都使用 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
});
}
我对这一切都错了吗?
只是为了重新迭代,我想让 jasmine 知道什么时候 mockjax / ajax 是 .done() 而无需done
从 jasmine 传入我的视图模型。