Javascript TDD非常新,目前正与Jasmine合作。
我在比较两个对象时遇到了问题。
我正在测试的函数被分配了一个作为定义传递的对象(我正在使用require) -
define(
['jquery',
'src/frameManager'],
function($,FrameManager){
return {
// OBJECTS
frameManager : FrameManager,
....
}
这是我的测试:
define(['init', '../../../src/frameManager'], function (init, frameManager) {
...
it("Init to contain property frameManager with type frameManager", function() {
console.log(init.frameManager)
console.log(frameManager)
expect(init.frameManager).toEqual(jasmine.any(frameManager));
});
....
});
两个控制台日志向我显示完全相同的对象,但我收到此错误:
TypeError: Expecting a function in instanceof check, but got #<Object>
我也在没有jasmine.any的情况下尝试了上述内容:
expect(init.frameManager).toEqual(frameManager);
但仍然没有快乐。在这种情况下我收到以下错误:
Error: Expected Object({ iframe: ({ context: HTMLNode, selector: '#preview-frame' }), frameContents: false, parent: false, templateBody: false, parsedTemplate: false, services: Object({ url: false, type: false, data: false, dataType: false, callback: false, call: Function, set: Function, ajaxService: Function, isEmpty: Function }), init: Function, setOptions: Function, parseIframe: Function, registerEvents: Function, getParsedTemplate: Function, populateIframe: Function }) to equal Object({ iframe: ({ context: HTMLNode, selector: '#preview-frame' }), frameContents: false, parent: false, templateBody: false, parsedTemplate: false, services: Object({ url: false, type: false, data: false, dataType: false, callback: false, call: Function, set: Function, ajaxService: Function, isEmpty: Function }), init: Function, setOptions: Function, parseIframe: Function, registerEvents: Function, getParsedTemplate: Function, populateIframe: Function }).
如您所见,两个对象完全相同...... 有没有人有任何建议?
感谢。
答案 0 :(得分:0)
深入比较两个对象的最简单方法是使用下一个条件
JSON.stringify(obj1) == JSON.stringify(obj2);
所以只需修改你的代码
expect(JSON.stringify(init.frameManager)).toEqual(JSON.stringify(frameManager));
如果您在测试中多次使用对象比较,请考虑创建custom matcher