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

Javascript tests - How to compare two objects in Jasmine

本文关键字:对象 两个 Jasmine 比较 tests 何比较 Javascript      更新时间:2023-09-26

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>

我也尝试过上面没有茉莉花.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 }).

如您所见,这两个对象完全相同...有人有什么建议吗?

谢谢。

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

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

所以只需修改你的代码

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

如果在测试中多次使用对象比较,请考虑创建自定义匹配器