目前,我有一个函数,有时会返回一个内部有一些函数的对象.使用expect(...).toEqual({...})它时似乎不匹配那些复杂的对象.具有函数或File类的对象(来自输入类型文件),它就是不能.怎么克服这个?
Vla*_*lin 17
expect(_.isEqual(obj1, obj2)).toEqual(true);
Run Code Online (Sandbox Code Playgroud)
如果可行,您可以创建自定义匹配器:
this.addMatchers({
toDeepEqual: function(expected) {
return _.isEqual(this.actual, expected);
});
});
Run Code Online (Sandbox Code Playgroud)
所以你可以编写如下规格:
expect(some_obj).toDeepEqual(expected_obj);
Run Code Online (Sandbox Code Playgroud)
poc*_*sar 13
正如Vlad Magdalin在评论中指出的那样,将对象变为JSON字符串,它可以和它一样深,并且函数和File/FileList类.当然,它不是toString()在函数上,而是可以称为'函数'
function replacer(k, v) {
if (typeof v === 'function') {
v = v.toString();
} else if (window['File'] && v instanceof File) {
v = '[File]';
} else if (window['FileList'] && v instanceof FileList) {
v = '[FileList]';
}
return v;
}
beforeEach(function(){
this.addMatchers({
toBeJsonEqual: function(expected){
var one = JSON.stringify(this.actual, replacer).replace(/(\\t|\\n)/g,''),
two = JSON.stringify(expected, replacer).replace(/(\\t|\\n)/g,'');
return one === two;
}
});
});
expect(obj).toBeJsonEqual(obj2);
Run Code Online (Sandbox Code Playgroud)
如果有人像我一样使用node.js,那么当我只关注比较简单属性而忽略所有函数时,我在Jasmine测试中使用以下方法.此方法需要json-stable-stringify,用于在序列化之前对对象属性进行排序.
用法:
var stringify = require('json-stable-stringify');
var obj1 = {
func: function() {
},
str1: 'str1 value',
str2: 'str2 value',
nest1: {
nest2: {
val1:'value 1',
val2:'value 2',
someOtherFunc: function() {
}
}
}
};
var obj2 = {
str2: 'str2 value',
str1: 'str1 value',
func: function() {
},
nest1: {
nest2: {
otherFunc: function() {
},
val2:'value 2',
val1:'value 1'
}
}
};
it('should compare object properties', function () {
expect(stringify(obj1)).toEqual(stringify(obj2));
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28297 次 |
| 最近记录: |