如何使用Jasmine测试$(document).ready()中的函数或代码?

时间:2013-07-10 10:03:18

标签: jquery html jasmine

我在$(document).ready(function())中有多个函数和很多代码。我正在使用jasmine来测试ready函数内部的函数以及ready()中的代码,但是当执行内部描述的测试用例时,它无法访问ready函数()中的代码。

我在$(document).ready(function())中有多个函数和很多代码。我正在使用jasmine来测试ready函数内部的函数以及ready()中的代码,但是当执行内部描述的测试用例时,它无法访问ready函数()中的代码。

$(document).ready(function () {
    function testMe(){
        testVar = true;
    }
});

Jasmine测试套件

describe("test suite", function(){
    beforeEach(function () {
        testme = false
    });
    it("Test Alert Box Message For Change Modal", function() {
        expect(testme).toEqual(true);
    });
});

请建议采用上述方法采取何种方法。

1 个答案:

答案 0 :(得分:1)

您没有测试代码是否已运行。甚至代码看起来像什么。您正在测试代码的作用。

在您的示例测试中,您有两个问题。

  1. 您的expect()正在检查testme而不是变量testVar的值,因此始终会失败,因为testme将未定义
  2. 您可以在$(document).ready()中定义该功能,但从不实际执行该功能。因此,即使您正在检查正确的变量,也不会更改该值,因为您没有调用它。
  3. Jasmine将在执行测试之前准备好文档,因此在此函数中包含的代码没有问题。因此,对$(document).ready()函数的测试应确保正确设置数据,注册事件处理程序等等。

    你可以监视jQuery on()函数,并确保它传递了正确的回调。间谍的调用数组获取调用对象的副本,您可以检查它以确保使用正确的选择器。回调本身将在单独的测试用例中进行测试。或者,您可以在测试页面上设置html fixture,然后在以后的测试用例中自行调用事件。

    ready()函数的内部函数的存在超出了测试范围。您希望能够更改/删除这些内部函数并重新运行测试,以确保您没有影响任何功能。如果函数不能在ready()函数之外执行,那么它是一个实现细节,您无需担心它。