javascript - 如何在单元测试中调用 $(document).ready(function() {})

标签 javascript jquery unit-testing

我在单元测试中尝试调用 document.ready( function() {}) 时遇到困难。假设我的 javascript 文件中有多个,其中一个在命名函数内调用,即

function myFunction() {
    $(document).ready(function() {
        //...
    });
}

我如何在我的单元测试中实际调用它们以便我可以实际测试它们?我正在使用 JsTestDriver 对我的 javascript 进行单元测试。

谢谢。

最佳答案

如果是单元测试,我猜你会在给定特定输入时检查函数输出?

这是我的看法:

您应该为调用 document.ready 的情况和未调用的情况做好准备。

因此,您的单元测试应该对每个函数运行两次 - 一次模拟预就绪调用,一次模拟预就绪调用。也就是说,您应该有一个演练,其中发生在 document.ready 上的任何事情都会运行,而另一个演练只是被忽略(可能会在生命周期的后期调用)。

编辑: 只需重新阅读问题并了解更多。您可以重写 $(document).ready 来执行您想要的操作(这不是等待 DOMLoaded 事件触发,而是立即运行函数)。此代码段将用一个完全相同的函数替换 $(document).ready 函数。它应该在任何单元测试之前运行。

var postReady = true; // or false to ignore the function calls.
jQuery.fn.ready = function(fn)
{
    if(postReady && fn) fn();
}

示例测试用例:

<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>

关于javascript - 如何在单元测试中调用 $(document).ready(function() {}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1837382/

相关文章:

java - 如何使用 Mockito 模拟方法调用

javascript - 仅加载点击的图像

javascript - 如何使用 react-native 和 javascript 在应用程序的主页中添加弹出窗口?

javascript - 使用 JS 和 JSON 创建记录时未正确使用所有者值

jquery - 使用 jQuery 检查 div 是否隐藏

javascript - 如何向表单添加输入字段

javascript - jQuery 防止动画分区的跳跃

javascript - 使用 ajax 提交表单后停留在同一页面

python - 学习 Django 单元测试

xcode - NSURL 书签在 Xcode Server 上的单元测试中失败