Подтвердить что ты не робот

Jasmine: проверьте, что массив содержит элемент с заданными свойствами

Я использую Karma/Jasmine для тестирования данного класса. Мне нужно проверить, что массив содержит объект с заданным свойством, т.е. Я не хочу указывать весь объект (он довольно большой и тест будет менее ремонтопригодным, если бы мне пришлось).

Я пробовал следующее:

expect(filters.available).toContain(jasmine.objectContaining({name:"majors"});

но это дало мне ошибку "жасмин" не определен, и я не смог выяснить причину этой ошибки.

4b9b3361

Ответ 1

Одним из способов сделать это в jasmine 2.0 является использование настраиваемого совпадения. Я также использовал lodash для итерации по массиву и внутри объектов внутри каждого элемента массива:

'use strict';
var _ = require('lodash');
var customMatcher = {
    toContain : function(util, customEqualityTesters) {
        return {
            compare : function(actual, expected){
                if (expected === undefined) {
                  expected = '';
                }
                var result = {};
                _.map(actual, function(item){
                    _.map(item, function(subItem, key){
                        result.pass = util.equals(subItem,
                        expected[key], customEqualityTesters);
                    });
                });
                if(result.pass){
                    result.message = 'Expected '+ actual + 'to contain '+ expected;
                }
                else{
                    result.message = 'Expected '+ actual + 'to contain '+ expected+' but it was not found';
                }
                return result;
            }
        };
    }
};


describe('Contains object test', function(){
    beforeEach(function(){
        jasmine.addMatchers(customMatcher);
    });

    it('should contain object', function(){
        var filters = {
            available: [
                {'name':'my Name','id':12,'type':'car owner'},
                {'name':'my Name2','id':13,'type':'car owner2'},
                {'name':'my Name4','id':14,'type':'car owner3'},
                {'name':'my Name4','id':15,'type':'car owner5'}
            ]
        };
        expect(filters.available).toContain({name : 'my Name2'});
    });
});