Ber*_*Cim 5 javascript jquery unit-testing
我在单元测试中尝试调用document.ready(function(){})时遇到了困难.假设我的javascript文件中有多个,其中一个在命名函数内部调用,即
function myFunction() {
$(document).ready(function() {
//...
});
}
Run Code Online (Sandbox Code Playgroud)
我如何在单元测试中实际调用它们,以便我可以实际测试它们?我正在使用JsTestDriver对我的javascripts进行单元测试.
谢谢.
如果是单元测试,我猜你在给定某些输入时检查功能输出?
这是我的意见:
您应该准备调用document.ready的情况和不调用document.ready的情况.
因此,您的单元测试应该运行每个函数两次 - 一次模拟预先准备好的呼叫,一次模拟就绪后呼叫.也就是说,你应该有一个run-through在document.ready DOES上运行的任何东西,以及一个只是被忽略的run-through(大概是在生命周期中稍后调用).
编辑:重新阅读问题并理解它.您可以覆盖$(document).ready来执行您想要的操作(不是等待DOMLoaded事件触发,而是立即运行函数).这个片段将用一个完全相同的函数替换$(document).ready函数.它应该在任何单元测试之前运行.
var postReady = true; // or false to ignore the function calls.
jQuery.fn.ready = function(fn)
{
if(postReady && fn) fn();
}
Run Code Online (Sandbox Code Playgroud)
示例测试用例:
<html><head><title>whatever</title>
<script type="text/javascript" src="/JS/jquery-1.3.2.js"></script>
<script type="text/javascript">
var postReady = true; // or false to ignore the function calls.
jQuery.fn.ready = function(fn)
{
alert("We stole ready!");
if(postReady && fn) fn();
}
$(document).ready(function()
{
alert("The function is called.");
});
</script>
</head><body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
你知道document.ready...工作,所以只需要调用其中的函数.理想情况下,如果你只有一个init由ready函数调用的函数,那么你调用一个函数,它可以满足您的需要,并且您可以继续进行测试.
你可以把单元测试放得太远,在这种情况下你需要问自己你在测试什么,以及为什么.JQuery document.ready函数可以工作,并且工作得很好(你知道这是因为它已被很多人测试过).
我认为诀窍是,而不是创建一个匿名函数,命名一个,并使用它.
//So instead of this...
$(document).ready(function() {...});
//Do the following
$(document).ready(my_function);
Run Code Online (Sandbox Code Playgroud)
然后你只需测试my_function并确保它正常工作.确保按照要加载的顺序测试功能以进行准确测试.
这个问题的部分答案可以在这里找到。
下面是根据上述答案回答这个问题的示例代码:
myFunction();
$.readyList[1]();
Run Code Online (Sandbox Code Playgroud)
该索引假定源文件中只有 1 个 document.ready 函数。索引 0 指的是浏览器上的其他信息。
| 归档时间: |
|
| 查看次数: |
7800 次 |
| 最近记录: |