测试jQuery代码的最新方法是什么?

时间:2015-06-25 05:17:17

标签: javascript jquery unit-testing

我是JavaScript的新手。想象一下,我有以下代码:

$(document).ready(function() {
  $('#nights').on('keyup', function() {
    var nights = +$(this).val();
    var dailyPrice = +$(this).closest(".tour").data("daily-price");
    $('#total').text(nights * dailyPrice);
    $('#nights-count').text($(this).val());
  });
});

如何对匿名函数进行单元测试

  1. 检索当前元素的值
  2. +$(this).closest(".tour").data("daily-price")
  3. 检索数据
  4. 然后在text(...)$('#total')
  5. 上调用$('#nights-count')

    请注意,我对单元测试很感兴趣(因此创建了一个完整的Selenium测试套件,它输入了某些东西然后检查元素的值不适合我) ,这不需要我添加新的抽象层。

    通过抽象层我的意思是:我可以创建类JQueryAbstraction然后创建2个子类 - 一个调用真正的jQuery方法,另一个调用真正的jQuery方法,它只计算调用次数

1 个答案:

答案 0 :(得分:1)

您可以尝试介绍流行的单元测试轻量级框架,如Jasmine,Mocha,QUnit

所有这些框架都可以与AngularJS,JQuery等共存

从您使用匿名函数尝试的示例中,您可以将该函数转换为非匿名函数并将其传递给测试工具

确保到达最后一行我引入了一个简单的全局变量并为其赋值,比如done = true或done = false

示例:

select name, (case when (sum(case when TransTypeName like 'credit%' then amount else 0 end) -
sum(case when TransTypeName like 'Debit%' then amount ) else 0 end)) *5/100)<0 then 0 else  (sum(case when TransTypeName like 'credit%' then amount else 0 end) -
sum(case when TransTypeName like 'Debit%' then amount ) else 0 end)) *5/100) as Interest
from ...........

现在您可以像在Jasmine中一样使用单元测试来测试 onReady 代码,您可以对实际文档做好评论

var done = false;
var onReady = function() {
  $('#nights').on('keyup', function() {
    var nights = +$(this).val();
    var dailyPrice = +$(this).closest(".tour").data("daily-price");
    $('#total').text(nights * dailyPrice);
    $('#nights-count').text($(this).val());
  });
  done = true;
}

$(document).ready(onReady);

通过单元测试调用该功能

//$(document).ready(onReady);

但是:如果您对分别声明匿名函数不感兴趣,那么您可以遍历文档对象并获取就绪事件函数。