2016-06-07 55 views
-1

我花了很多時間試圖弄清楚如何進入茉莉花的匿名函數。如何使用Jasmine/Javascript進行匿名功能

樣品的方法:

numerateColumns: function (rows) { 
      rows.each(function() { 
       var $row = $(this); 
       $row.children().each(function (index) { 
        var $cell = $(this); 
        $cell.addClass('column-' + (index + 1)); 
       }); 
      }); 
     } 

嘗試測試有:

it("[TEST] Should call each method.", function() { 

      // setup 
      var rows = { 
       each: function() { 
        return { 
         children: function() { 
          return { 
           replaceWith: function() { 
            return null; 
           } 
          }; 
         } 
        }; 
       } 
      }; 
      spyOn(rows, 'each').and.callThrough(); 

       // method under test 
       module.numerateColumns(rows); 

       // expectations 
       expect(rows.each).toHaveBeenCalled(); 
      }); 

但覆蓋測試顯示我的方法的代碼僅在第一行(rows.each)被讀取。

如何強制它讀取裏面的所有代碼(function(){})?

回答

0

爲什麼要測試jQuery?它完美的工作,如果不是的話 - 一些測試可能會在新版本發佈之前被捕獲。

function numerateColumns($rows) { 
 
    $rows.each(function() { 
 
    var $row = $(this); 
 
    $row.children().each(function(index) { 
 
     var $cell = $(this); 
 
     $cell.addClass('column-' + (index + 1)); 
 
    }); 
 
    }); 
 
} 
 

 
describe('Iterate over columns`', function() { 
 
    var mockRows 
 

 
    beforeEach(function() { 
 
    mockRows = $('<div><div></div></div>') 
 
    }) 
 

 
    it("calls .each() on passed jQuery collection", function() { 
 
    spyOn($, 'each').and.callThrough(); 
 
    
 
    expect($.each).not.toHaveBeenCalled(); 
 

 
    numerateColumns(mockRows); 
 

 
    expect($.each).toHaveBeenCalled(); 
 
    }); 
 

 
    it("adds CSS class to each child", function() { 
 
    var column = $(mockRows[0]).find('div'); 
 
    
 
    expect(column.hasClass('column-1')).toBeFalsy() 
 
    
 
    numerateColumns(mockRows); 
 

 
    expect(column.hasClass('column-1')).toBeTruthy() 
 

 
    }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" /> 
 
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>

可以測試什麼 - 它是提取業務邏輯無關jQuery的本身。