javascript - Jasmine :检查数组是否包含具有给定属性的元素

标签 javascript arrays jasmine contains karma-runner

我正在使用 Karma/Jasmine 来测试给定的类。我需要测试数组是否包含具有给定属性的对象,即我不想指定整个对象(它相当大,如果必须的话,测试将变得难以维护)。

我试过以下方法:

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

但这给了我错误 'jasmine' is not defined,我一直没能找出错误的原因。

最佳答案

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'});
    });
});

关于javascript - Jasmine :检查数组是否包含具有给定属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24341746/

相关文章:

javascript - 如何使用javascript在一定长度后换行

javascript - 只有在第一个功能完全完成后才运行第二个功能

javascript - 在单元测试 AngularJS 服务时注入(inject)依赖服务

javascript - 使用 Media Source Extension API 发出开始播放高可变比特率视频的问题

c# - 如何在没有 WebBrowser 控件的情况下使用 "render"HTML

javascript - 未获取数组的值,但数组存在 - JS

ios - 我如何将带有参数的请求放入 NSArray 并稍后在循环中调用?

php - 检查一个数组是否可以放入另一个数组

jasmine - 如何在不使用外部 html 文件的情况下在 jasmine 测试中添加 DOM 元素?

javascript - 在 addEventHandler 中测试代码