1

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

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

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

请建议上述方法需要采取什么方法。

4

1 回答 1

1

您没有测试该代码是否已运行。甚至是代码的样子。您正在测试代码的作用。

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

  1. expect()正在检查的值testme而不是你的变量testVar,所以总是会失败,因为testme将是未定义的
  2. 您在您的函数中定义$(document).ready()但从未实际执行它。因此,即使您检查了正确的变量,该值也不会因为您没有调用它而改变。

Jasmine 将在执行测试之前准备好文档,因此包装在此函数中的代码没有问题。因此,您对$(document).ready()函数的测试应确保正确设置数据、注册事件处理程序等。

您可以监视 jQueryon()函数并确保它通过了正确的回调。间谍的调用数组获取调用对象的副本,您将能够检查它以确保使用了正确的选择器。回调本身将在单独的测试用例中进行测试。或者您可以在测试页面上设置一个 html 夹具,然后在以后的测试用例中自己调用事件。

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

于 2013-07-11T21:05:45.963 回答