【问题标题】:Test Javascript Function Wrapped in jQuery using Jasmine使用 Jasmine 测试用 jQuery 包装的 Javascript 函数
【发布时间】:2014-11-24 21:13:39
【问题描述】:

我正在尝试在 Rails 应用程序中使用 Jasmine 测试嵌套在 jQuery 函数中的 JavaScript 函数,如下所示:

jQuery(函数(){ var javascriptFunction = 函数 () { ...功能正在测试中... } }

当我运行 Jasmine 测试时,我收到以下错误:“ReferenceError: Can't find variable: javascriptFunction”

如果我将 JavaScript 函数放在 jQuery 函数之外,我将不再收到该错误;但是,该 JavaScript 函数需要保留在 jQuery 函数中,以便应用程序的其余部分正常工作。

有没有办法指定 Jasmine 在 jQuery 函数中查找 JavaScript 函数?

【问题讨论】:

  • 我认为没有。但在这种情况下,您可以测试此函数正在执行的操作的结果。例如。如果它正在设置数据,请确保其设置正确。在这种情况下需要测试公共接口
  • 要做到这一点,难道我还需要调用外部 jQuery 方法来设置数据吗?我试图命名 jQuery 方法并在 Jasmine 测试中调用它,但收到了同样的错误。
  • 你能把一个具体的例子放到 JSFiddle 中,然后把 url 粘贴到这里吗?
  • 这里是没有命名jQuery函数的版本:jsfiddle.net/825oqhy3这里是命名的版本:jsfiddle.net/ad5kp3dv
  • 那么在该示例中如何调用 selectIsAcCheckbox?

标签: javascript jquery ruby-on-rails jasmine


【解决方案1】:

好的,现在我明白你想要实现的目标了。

没有办法测试你所做的事情,因为它是匿名的,正如你在 cmets 中描述的那样。最好的方法是将该代码作为函数添加到某处。可能在窗户上,或者最好在某个其他班级。然后,您可以随时测试调用函数的结果。

您正在使用的 JQuery 就绪函数实际上只是启动应用程序的一种方式。它说'好的,一切都准备好了,让我们走吧'。在测试中,您希望这种情况发生并且可重复,因此您不能依赖 JQuery 来执行此操作。

//Current working version
function doTheThing(){
   if ($("#isac").length && $("#isac")[0].checked) {
    $(".nested-form-container").show();
    enableGraduatedCheckbox();
  } else {
    $(".nested-form-container").hide();
  }   
}

jQuery (function () {
  doTheThing();
}

这里有一个类似的讨论,围绕您正在尝试做的事情的可测试性和相同的建议。 https://softwareengineering.stackexchange.com/questions/204389/how-to-test-functions-or-the-code-inside-document-ready-using-jasmine

【讨论】:

  • 这很有帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多