如何使用Jasmine / Javascript进行匿名功能

时间:2016-06-07 13:59:07

标签: jasmine anonymous-function

我花了很多时间试图弄清楚如何进入茉莉花中的匿名函数。

方法示例:

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(){})?

1 个答案:

答案 0 :(得分: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()

  });
})
&#13;
<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>
&#13;
&#13;
&#13;

您可以测试的内容 - 它是提取的独立于jQuery本身的业务逻辑。