Javascript测试 - 如何比较Jasmine中的两个对象

时间:2015-03-13 11:11:10

标签: javascript unit-testing tdd jasmine

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 }).

如您所见,两个对象完全相同...... 有没有人有任何建议?

感谢。

1 个答案:

答案 0 :(得分:0)

深入比较两个对象的最简单方法是使用下一个条件

JSON.stringify(obj1) == JSON.stringify(obj2);

所以只需修改你的代码

expect(JSON.stringify(init.frameManager)).toEqual(JSON.stringify(frameManager));

如果您在测试中多次使用对象比较,请考虑创建custom matcher