Jasmine等待函数完成后的HTML呈现

时间:2016-02-12 10:08:54

标签: jasmine

假设我们有一个带有jquery验证的表单。现在我们创建一个简单的Jasmine规范,并想测试如果我们提交一个空表单,错误消息是否可见。

我的第一步是在jquery validate工作并显示错误消息之后触发提交表单事件。显示错误消息之前的时间窗口非常小(2ms),但对于Jasmine测试来说太大了。目前有一个setTimeout()它可以工作,但我认为这是一个坏方法:(

我是Jasmine的新手,我认为一定有更好的方法吗?什么与间谍?

虚拟规格例如:

describe("Lorem Impsum: ", function () {
it("Form validation shows error messages.", function () {
    $("#MyForm").submit();
    expect($(".error")).toBeVisible();
  });
});

1 个答案:

答案 0 :(得分:1)

使用set_usersetTimeout进行投票可能不是一个糟糕的方法。如果页面很复杂,定期检查比使用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。