单元测试jQuery document.ready函数

Ber*_*Cim 4 javascript jquery unit-testing

关于单元测试jQuery的document.ready function(),我有一个问题.

目前我的代码中有两个场景:

function myFunction()
{
    $(document).ready(function() { ... });
}
Run Code Online (Sandbox Code Playgroud)

和:

$(document).ready(function()
{
    // some really long setup code here
});
Run Code Online (Sandbox Code Playgroud)

我尝试为第一个场景编写单元测试,但我无法让它运行到document.ready函数中.至于第二个场景,我还没有想出一种方法来测试它(我很难找到一种方法来测试它和语法).

所以假设我无法更改源代码,有没有办法测试这些功能?(假设测试它们是个好主意)

谢谢.

Igo*_*aka 6

您不需要进行测试,$(document).ready因为它是框架的一部分,并且已经过单元测试.在编写单元测试时,您需要测试两件事:

  1. 您与框架的互动.这包括确保使用正确的参数调用正确的函数.
  2. 您自己的代码 - 您的代码做正确的事情.

所以你真正需要做的是确保所调用的代码$(document).ready是正确的.

function myInit(){
//...
}
function myFunction()
{
  $(document).ready(myInit);
}
Run Code Online (Sandbox Code Playgroud)

您现在需要做的就是单元测试myInit功能.

您还可以做的是模拟$.ready函数以确保您正在调用它:

var readyCalled = false;
$.ready = function(func){
  readyCalled = (myInit == func);
}

//Your code containing `myInit` will get executed somewhere here
//....
//Then test:
test("Should have called ready", function() {
 ok(readyCalled, "ready should have been called with myInit as a parameter.")
});
Run Code Online (Sandbox Code Playgroud)