如果number为0,则对空性的测试失败
Test against emptiness fails if number is 0
由于某种原因,我的老板改变了我在JS中获得的数据,所以,如果我曾经接收过字符串,现在我可以接收字符串或数字(从0到n)。直到今天,当我发现要测试的数字恰好是0时,旧的代码块才出现问题。
原因如下:
if(myObject.getData()) {
...
}
else {
//here's where I go
}
getData()
返回字符串和数字,但是当数字是0
时,if
测试将其作为布尔值,结果始终是false
,而两行后,在花括号内,我需要数字0
将其发送到服务器。
检查数据是否不是null
,不是false
,不是""
,甚至不是布尔值,并"保留"我的0
的最佳方法是什么?
您可以在if
语句中引入OR,使用严格相等运算符(===
)检查它是否为数值0
:
var data = myObject.getData();
if ( data || data === 0 )
一些测试用例:
data = "" // false
data = false // false
data = undefined // false
data = 0 // true
data = 1 // true
data = "test" // true
逆转您的要求,似乎您只想要非空字符串和数字。如果这个假设是正确的,您可以使用typeof
并执行如下操作:
var data = myObject.getData();
if((typeof data === 'string' && data !== '') || typeof data === 'number') {
//...
}
else{
//here's where I go
}
这种方法有两个主要优点:
- 它是明确的输入格式,因此是自文档。
- 防止将来任何输入类型的修改。
相关文章:
- ChaiJS:无法导致测试失败
- 当我的单元测试失败时,回调被调用了两次
- 预期[false]为false量角器e2e测试失败
- 为什么在我的单元测试中instanceOf的测试失败
- yeoman generator聚合物的web组件测试失败
- 当Firefox尝试登录时,Selenium测试失败
- 量角器中的AngularJS E2E测试失败
- 用摩卡测试失败的承诺'内置的promise支持
- 这个单元测试失败的原因是什么
- 当分离到不同的文件中时,测试失败
- travis测试失败,通过本地测试
- 字符串测试失败
- Javascript单元测试依赖关系-当依赖对象发生变化时,如何使测试失败
- 如何在捕获Promise时使Node单元测试失败
- AngularJs的单元测试失败是因为Karma没有'无法识别$scope$控制器中的侦听器
- 有没有办法在node.js中的异常或测试失败时启动调试器
- Capybara JS 测试失败了 page.all
- 现代化测试失败后仍应用函数
- 角度咆哮 V2 - 单元测试失败
- 为什么这个 QUnit 测试失败