如何测试此angularjs过滤器?

时间:2018-03-27 22:15:00

标签: javascript angularjs testing karma-jasmine

我在网上找到了这个AngularJS独特的过滤器示例:https://tutorialedge.net/javascript/angularjs/removing-duplicates-from-ng-repeat/

我正在尝试测试它。我真的很接近,但我收到一个错误,我不明白为什么。知道我做错了吗?

describe('Unique Filter', function() {
  'use strict';

  var $filter;

  beforeEach(function () {
    module('resource');

    inject(function (_$filter_) {
      $filter = _$filter_;
    });
  });

  it('should only return unique values', function() {
    var list = [
      { 'name' : "ipad" },
      { 'name' : "ipad" },
      { 'name' : "ipad" },
      { 'name' : "ipod" },
      { 'name' : "iMac" },
      { 'name' : "iMac" },
      { 'name' : "iMac" },
      { 'name' : "iPhone" },
      { 'name' : "iWatch" },
      { 'name' : "iWatch" },
      { 'name' : "iWatch" },
      { 'name' : "iPeed" }];

    var resultList = [
      { 'name' : "ipad" },
      { 'name' : "iMac" },
      { 'name' : "iPhone" },
      { 'name' : "iWatch" },
      { 'name' : "iPeed" }];

    var result = $filter('unique');
    expect(result(list)).toBe(resultList);
  });
});

我得到的错误是:

PhantomJS 2.1.1 (Linux 0.0.0) Unique Filter should only return unique values FAILED
    Expected [ Object({ name: 'ipad' }) ] to be [ Object({ name: 'ipad' }), Object({ name: 'iMac' }), Object({ name: 'iPhone' }), Object({ name: 'iWatch' }), Object({ name: 'iPeed' }) ].
    test/spec/resource/resource.filter.js:37:30

2 个答案:

答案 0 :(得分:0)

查看结果,我可以说您的唯一过滤器只返回列表中的一个对象而不是所有唯一对象。可能你应该再看一下过滤器的实现。

它希望数组的键可以过滤 - var result = $filter($scope.list)('unique')('name')

答案 1 :(得分:0)

正如arbghl所说,当我需要整个阵列时,我只返回了一个独特的物品。改变这两条线就行了!我也试图在列表上做我不应该做的工作,我需要传递过滤器的参数。

var result = $filter('unique')(list, 'name');
expect(result).toEqual(resultList);