5

我是单元测试的新手并试图掌握事物。我正在尽力遵循本教程:http ://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-testacular.html#testing-filters 。在我的 AngularJS 应用程序中,我有一个需要测试的过滤器。我已经正确设置并运行了 Node、Testacular 和 Jasmine。我要测试的过滤器非常简单:

myApp.filter('bill_ship', function () {
    return function (userData) {
        var output = "---";
        switch (userData) {
            case "0":
                output = "Billing";
                break;
            case "1":
                output = "Shipping";
                break;
        }
        return output;
    }
});

我以为我的测试设置正确,但它始终失败。

describe("Unit Testing: Filters - ", function() {
    beforeEach(angular.mock.module('prismApp', ['bill_ship']));

    //BillShip Filter
    it('should have a bill-ship filter: ', inject(function($filter){
        expect($filter('bill_ship')).not.toEqual(null);
    }));
});

它失败并显示以下消息:错误:参数“fn”不是函数,从 bill_ship 获取字符串。

那么......我在哪里做错了?

4

2 回答 2

24

如果其他人想知道(我花了一些时间才发现)我认为@MBielski注入过滤器的方式有点令人困惑,但肯定能完成这项工作!但是,我发现这是将过滤器注入 jasmine 单元测试环境以进行测试的好方法。

这是过滤器定义:

angular.module('prismApp.filters', [])

  .filter('billShip', function () {
    return function (userData) {
      // define filter
      ...
    }
  });

和测试:

describe("Unit Testing: Filters - ", function() {
  var billShip;

  // load the module
  beforeEach(module('prismApp.filters'));

  // load filter function into variable
  beforeEach(inject(function ($filter) {
    billShip = $filter('billShip');
  }));

  // test billShip filter
  it('should have a bill-ship filter: ', function () {
    // test away!
    expect(billShip).not.toEqual(null);
    expect(billShip("0")).toEqual("Billing");
    ...
  });
});

希望这对其他人有帮助。

于 2013-05-07T12:31:30.640 回答
1

好的,这就是为什么我不应该在没有咖啡因的情况下编码......

当您将要测试的文件放入配置文件时,它会很有帮助。男孩,我觉得自己很愚蠢。

于 2013-02-22T16:15:51.493 回答