如何在单元测试中期望结果表单过滤器

时间:2016-08-29 17:35:57

标签: angularjs unit-testing jasmine karma-jasmine

如果数组包含模拟数据(树),如何期望过滤器得到相同的结果。 我的自定义过滤器有两个参数,树和查询。如果查询为'foo',则过滤器的结果为:

        {
            nodes: [
                {
                    label: 'foo1'
                },
                {
                    label: 'foo2'
                }
            ],
            label: 'foo'
        }

如何期望数组中的任何元素与模拟树相等?

我的单元测试:

describe('customFilter', function () {
'use strict';

var definitionSearch,
    tree;

beforeEach(module('myApp'));

beforeEach(inject(function ($filter) {
    customFilter= $filter('customFilter');

    tree = [
        {
            nodes: [
                {
                    label: 'foo1'
                },
                {
                    label: 'foo2'
                }
            ],
            label: 'foo'
        },
        {
            nodes: [
                {
                    label: 'bar1'
                }
            ],
            label: 'bar'
        }
    ];
}));

it('should find name', function () {
    var query = 'foo'
    expect(customFilter(tree, query)).toEqual(/* what should be here*/);
    //customFilter(tree, query) ===> tree[0]
});
});

1 个答案:

答案 0 :(得分:0)

简单的解决方案是将过滤器的结果保存到变量,并迭代数组中的项目进行比较

var result = customFilter(tree, 'foo')

expect(_.isEqual(result[0].nodes.sort(), tree[0].nodes.sort())).toBe(true);
expect(result[0].label === tree[0].label).toBe(true);
expect(result[0].nodes.length === tree[0].nodes.length).toBe(true);