2016-02-12 41 views
3

可以说我们有一个带有jQuery验证的表单。现在我们创建一个简单的Jasmine规范,并且想要测试如果我们提交一个空表单时错误消息是否可见。茉莉花等到功能完成后的HTML渲染

我的第一步是触发提交表单事件后,jquery验证将工作并显示错误消息。直到错误信息显示的时间窗口非常小(2毫秒),但对于茉莉花测试来说太大了。目前用的setTimeout()它的工作原理,但我认为这是一个不错的方法:(

我新的茉莉花,我认为必须有一个更好的方式与东西间谍

假人规范例如?: 。

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

回答

0

使用setTimeoutsetInterval轮询可能不是一个坏的方式如果页面是复杂的,定期的检查更简单,比使用MutationObserver(这是一个单元测试;而不是应用程序),如果您选择轮询间隔足够短,测试不会太慢。例如:

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); 
    } 
} 

您需要声明并调用done回调函数,以便Jasmine在测试规范完成时得到通知。