Jasmine:Matcher 与 undefined 和 null 不同(!= undefined 和!= null)
Posted
技术标签:
【中文标题】Jasmine:Matcher 与 undefined 和 null 不同(!= undefined 和!= null)【英文标题】:Jasmine: Matcher to be different from undefined and diferent from null (!= undefined and != null) 【发布时间】:2019-02-15 19:09:24 【问题描述】:我注意到如果我写了expectexpect(null).toBeDefined();
,测试就会通过,因为茉莉花认为null是一个定义的对象,但没有任何值。
我的问题是,如果有一个匹配器来评估对象是否同时与 undefined
和 null
不同。
【问题讨论】:
如果是对象,可以使用toBeFalsy
,因为它不会与0、''
或NaN进行比较。有关详细信息,请参阅documentation about falsy values
【参考方案1】:
我求助于expect(myValue || undefined).toBeDefined()
,因此可能的null
将变为undefined
,然后根据需要使条件失败。
【讨论】:
【参考方案2】:这是我的方法。我认为这是描述性的。
expect(![null, undefined].includes(myValue))
.withContext('myValue should not be null or undefined')
.toEqual(true);
【讨论】:
【参考方案3】:据我了解,您可以使用juggling-check 来检查 null 和 undefined。
let foo;
console.log(foo == null); // returns true when foo is undefined
let bar = null;
console.log (bar == null); // returns true when bar is null
那我一直用茉莉花做这个期待
expect(foo == null).toBe(true); // returns true when foo is null or undefined
如果我们能做到这一点,那就太好了(但据我所知,你做不到)。
expect(foo).toBeNullOrUndefined() // How cool would that be! :-)
【讨论】:
【参考方案4】:如果上下文为空或未定义,则失败。这种检查现有的更好方法
expect(context).toEqual(jasmine.anything());
【讨论】:
【参考方案5】:只需使用.toEqual()
:
expect(context).not.toEqual(null);
在 javascript 中,undefined == null
是 true
,因此此测试将排除 undefined
和 null
。
【讨论】:
错误:预期未定义等于 null。 @AliAdravi 这很奇怪。我以为我当时已经对此进行了测试,但 Jasmine 明确检查要比较的任一值是否为null
,如果是,则使用===
。我会删除这个答案,但不能删除已接受的帖子。还是谢谢。【参考方案6】:
我发现的唯一方法是在不同的语句中评估 if is undefined
和 if is not null
:
expect(context).toBeDefined();
expect(context).not.toBeNull();
但这并不能真正回答我的问题。
【讨论】:
我的回答有帮助吗?以上是关于Jasmine:Matcher 与 undefined 和 null 不同(!= undefined 和!= null)的主要内容,如果未能解决你的问题,请参考以下文章
Jasmine在等待Protractor与页面同步时出错:“hooks is undefined”
jasmine-karma 中的模块“DynamicTestModule”导入的意外值“未定义”