Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何对基于jQuery的代码进行单元测试?_Javascript_Jquery_Unit Testing - Fatal编程技术网

Javascript 如何对基于jQuery的代码进行单元测试?

Javascript 如何对基于jQuery的代码进行单元测试?,javascript,jquery,unit-testing,Javascript,Jquery,Unit Testing,我在一个名为index.js的文件中有以下代码。我想测试其中的一些函数add,print是主要的函数 (function($){ "use strict"; $(function(){ var add = function(a, b){ // ... }, print = function(str){ // ... }, setup = function(){ // ... }, in

我在一个名为index.js的文件中有以下代码。我想测试其中的一些函数
add
print
是主要的函数

(function($){
  "use strict";

  $(function(){

    var add = function(a, b){
    // ...
      },
    print = function(str){
    // ...
      },
      setup = function(){
    // ...
      },
      init = function(){
    // ...
      };

      setup();
      init();
  });
})(jQuery);
我怎样才能做到? 这种编码方式是否增加了客户端的安全性?我所拥有的只是在客户端运行的代码。没有服务器的参与

我试过:

var outerObj = (function(greet){
    var innerObj = (function(){
        return {test: function(){ console.log(greet); }}
    })();
    return innerObj;
})("hi");

outerObj.test();
但是,在我的例子中,
innerObj
行在等号的右侧有一个
$
,使得控制台叫喊$(…)的错误不是一个函数。 我同意,它是单个文档对象的数组

签出
var a=(function(){var val=$(function(){return 10;})(;})(),以查找错误

即使我抛弃外壳并带来
$(function(){})输出。我该怎么测试呢

它仍然是一个对象,仍然是一个错误


我可以执行什么样的测试,单元测试、bdd测试等等,以及如何执行?

我不太明白您在这里使用的是什么模式-它似乎有点反模式。它是不可测试的,并且不会暴露任何行为以供实际使用。我强烈推荐艾迪·奥斯马尼(Addy Osmani)免费阅读(或至少略读)

对于单元测试,我总是在简单的构造函数模式和易于使用的显示模块模式之间找到一个令人满意的中点

var x = function($){
"use strict";

  var add = function(a, b){
     alert('add');
    },
    print = function(str){
     return 1;
    },
    setup = function(){
      alert('setup');
    },
    init = function(){
      alert('init');
    };

  init();
  setup();

  return {
      add: add,
      print: print
  };
};

var y = new x(jQuery);
在上述示例中,
y
将提供
add
print
方法。在上查看一个样本测试

作为补充说明,我最近一直在使用优秀的工具来设置和运行我的JS单元测试。它是由jQuery团队编写的,所以你知道它会很好;)。 我还建议检查报告覆盖率,并设置多个测试用例

就其价值而言,BDD不是一种“测试类型”,而是一种工作方式。对于您应该进行的测试-单元测试和集成测试是最重要的2,IMO。我使用QUnit进行单元测试,使用Selenium和NUnit进行集成测试