Javascript 为什么我的摩卡/应阵列投掷测试失败?
下面的代码片段非常简单(来自)。但是,当与文字符号一起使用时,为什么Javascript 为什么我的摩卡/应阵列投掷测试失败?,javascript,testing,mocha.js,should.js,Javascript,Testing,Mocha.js,Should.js,下面的代码片段非常简单(来自)。但是,当与文字符号一起使用时,为什么[1,2,3]的计算结果是未定义的,而不是在myArray变量中使用时 var assert = require('assert') // "mocha": "^3.0.2" var should = require('should') // "should": "^11.1.0" describe('Array', function () { describe('#indexOf()', function () {
[1,2,3]
的计算结果是未定义的
,而不是在myArray
变量中使用时
var assert = require('assert') // "mocha": "^3.0.2"
var should = require('should') // "should": "^11.1.0"
describe('Array', function () {
describe('#indexOf()', function () {
var myArray = [1, 2, 3]
it('Should return -1 when the value is not present', function () {
myArray.indexOf(0).should.equal(-1) // a - success
[1, 2, 3].indexOf(0).should.equal(-1) // b - fails test
})
})
})
当我运行测试时,行“b”失败,如下所示:
Array
#indexOf()
1) Should return -1 when the value is not present
1) Array #indexOf() Should return -1 when the value is not present:
TypeError: Cannot read property 'indexOf' of undefined
... Error trace just points the line where it fails, nothing else ...
我希望你能解释一下这个令人不安但肯定很容易回答的问题。干杯。小提琴可以让你:
你缺少一个分号,这会干扰你的测试。我不是边缘案例方面的专家,但你可以在线阅读:
使您能够:
你缺少一个分号,这会干扰你的测试。我不是边缘案例方面的专家,但你可以在线阅读:
这个问题解释了为什么
使用函数表达式时应使用代码>。在本例中,每个something.should.whatever()
返回一个对象。实际上,应该只是扩展某物的对象.prototype
。不管怎样,为什么在换行“a”和“b”时测试通过了?就像我说的,我不是各种运行时解析javascript的专家,你问为什么它失败了,这是因为你没有终止你的语句。最佳做法是使用分号,我猜当文字位于第二位时,它会将其折叠并尝试进行属性查找,因为它会看到[xxx]
,这是一种查找对象属性的方法。这是一个猜测,这个问题解释了为什么使用函数表达式时应使用代码>。在本例中,每个something.should.whatever()
返回一个对象。实际上,应该只是扩展某物的对象.prototype
。不管怎样,为什么在换行“a”和“b”时测试通过了?就像我说的,我不是各种运行时解析javascript的专家,你问为什么它失败了,这是因为你没有终止你的语句。最佳做法是使用分号,我猜当文字位于第二位时,它会将其折叠并尝试进行属性查找,因为它会看到[xxx]
,这是一种查找对象属性的方法。这只是猜测
myArray.indexOf(0).should.equal(-1) ;
[1, 2, 3].indexOf(0).should.equal(-1);