假设我们有一个带有jquery验证的表单。现在我们创建一个简单的Jasmine规范,并想测试如果我们提交一个空表单,错误消息是否可见。
我的第一步是在jquery validate工作并显示错误消息之后触发提交表单事件。显示错误消息之前的时间窗口非常小(2ms),但对于Jasmine测试来说太大了。目前有一个setTimeout()它可以工作,但我认为这是一个坏方法:(
我是Jasmine的新手,我认为一定有更好的方法吗?什么与间谍?
虚拟规格例如:
describe("Lorem Impsum: ", function () {
it("Form validation shows error messages.", function () {
$("#MyForm").submit();
expect($(".error")).toBeVisible();
});
});
答案 0 :(得分:1)
使用set_user
或setTimeout
进行投票可能不是一个糟糕的方法。如果页面很复杂,定期检查比使用MutationObserver
更简单。 (这是单元测试;不是应用程序。)如果您选择足够短的轮询间隔,测试将不会那么慢。例如:
setInterval
您需要声明并调用describe("Lorem Impsum: ", function () {
it("Form validation shows error messages.", function (done) {
$("#MyForm").submit();
waitForElement(".error", function () {
expect($(".error")).toBeVisible();
done();
});
});
});
function waitForElement(selector, callback) {
var interval;
if ($(selector).length) {
callback();
} else {
interval = setInterval(function () {
if ($(selector).length) {
clearInterval(interval);
callback();
}
}, 10);
}
}
回调,以便在测试规范完成时通知Jasmine。