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是一个定义的对象,但没有任何值。

我的问题是,如果有一个匹配器来评估对象是否同时与 undefinednull 不同。

【问题讨论】:

如果是对象,可以使用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 == nulltrue,因此此测试将排除 undefinednull

【讨论】:

错误:预期未定义等于 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 无头 webkit 中更好的故障报告

jasmine-karma 中的模块“DynamicTestModule”导入的意外值“未定义”

Karma-Jasmine之安装与实例详解

Karma 与测试框架 Jasmine、Mocha、QUnit [关闭]

让 requirejs 与 Jasmine 一起工作