在单元测试中显示对象详细信息

时间:2013-06-25 20:43:32

标签: javascript unit-testing jsunit gjs

使用JsUnit,我试图利用assertEquals函数,这样当一套测试失败时,他们会打印出有关失败原因的有用信息。

我目前的情况是这样的:

let actual = some_method_call ();
let expected = [
        {num: 1, file: f, id: "apples"},
        {num: 6, file: f, id: "bananas"},
        {num: 9, file: f, id: "accurate_comparison"}
        ];
assertEquals (expected, actual);

不幸的是,迭代异常只留下了:

isJsUnitException: true
comment: null
jsUnitMessage: Expected [object Object],[object Object],[object Object] (object) but was 42 (number)
stackTrace: > JsUnitException:307
> _assert:113
> assertEquals:150
> testStealBitcoins:105
> anonymous:159

如何让预期行智能地显示我预期的对象内容?任何解决方案都需要适用于嵌套对象的各个层。另外,这是否是接近失败的测试调试的错误方法?

1 个答案:

答案 0 :(得分:2)

为assertEquals创建包装器非常有用且简单明了。我不明白的诀窍是,Javascript并不真正支持我习惯使用Java的equals方法或toString方法。

要打印变量的详细信息,以下是一个相当不错的方法:

if (typeof x === "object" && x !== null) {
    print (JSON.stringify(x));
}
else {
    print (String(x));
}

如果没有使用GJS,可以使用Console.log代替打印。 JSON stringify将对象转换为其JSON表示(作为String)。对于类型检查来说这是不准确的,但如果这不是你关心的问题,那么效果很好。