在Angular中测试过滤器存在

时间:2013-02-20 19:33:00

标签: angularjs jasmine karma-runner

我是新手进行单元测试并试图抓住东西。我正在尽力遵循本教程: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获得字符串。

所以......我在哪里做错了?

2 个答案:

答案 0 :(得分:24)

如果有其他人想知道(我在发现之前花了一些时间)我认为@MBielski注入过滤器的方式有点令人困惑,但是确切地完成了这项工作!但是,我发现这是将过滤器注入茉莉花单元测试环境以测试它们的好方法。

以下是过滤器定义:

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");
    ...
  });
});

希望这有助于其他任何人。

答案 1 :(得分:1)

好吧,这就是为什么我不应该在没有咖啡因的情况下进行编码... 当您在配置文件中放置要测试的文件时,它会有所帮助。男孩我觉得自己很蠢。