gpt4 book ai didi

javascript - Jasmine JavaScript 测试 - toBe vs toEqual

转载 作者:IT老高 更新时间:2023-10-28 11:05:18 28 4
gpt4 key购买 nike

假设我有以下内容:

var myNumber = 5;
expect(myNumber).toBe(5);
expect(myNumber).toEqual(5);

以上两个测试都将通过。 toBe()toEqual() 在计算数字时有区别吗?如果是这样,我什么时候应该使用一个而不是另一个?

最佳答案

对于原始类型(例如数字、 bool 值、字符串等),toBetoEqual 没有区别;任何一个都适用于 5true"the cake is a lie"

为了理解 toBetoEqual 之间的区别,让我们想象三个对象。

var a = { bar: 'baz' },
b = { foo: a },
c = { foo: a };

使用严格比较(===),有些东西是“相同的”:

> b.foo.bar === c.foo.bar
true

> b.foo.bar === a.bar
true

> c.foo === b.foo
true

但是有些东西,即使它们“相等”,也不是“相同”的,因为它们代表了存在于内存中不同位置的对象。

> b === c
false

Jasmine 的 toBe 匹配器只不过是严格相等比较的包装器

expect(c.foo).toBe(b.foo)

是一样的
expect(c.foo === b.foo).toBe(true)

不要只相信我的话;见 the source code for toBe .

但是bc代表功能上等价的对象;他们都长得像

{ foo: { bar: 'baz' } }

如果我们可以说 bc 是“相等的”,即使它们不代表同一个对象,那不是很好吗?

输入 toEqual,它检查“深度相等”(即通过对象进行递归搜索以确定其键的值是否相等)。以下两项测试都将通过:

expect(b).not.toBe(c);
expect(b).toEqual(c);

希望这有助于澄清一些事情。

关于javascript - Jasmine JavaScript 测试 - toBe vs toEqual,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com