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);