Javascript 摩卡噩梦:未捕获类型错误:无法读取属性';应用';未定义的

Javascript 摩卡噩梦:未捕获类型错误:无法读取属性';应用';未定义的,javascript,mocha.js,chai,nightmare,Javascript,Mocha.js,Chai,Nightmare,我正在尝试用Dream.js和Mocha运行一个示例测试,我不断得到上面的错误。以下是完整的输出: $ mocha nightmare-chai-example.js Nightmare demo Start page 1) should show form when loaded 0 passing (716ms) 1 failing 1) Nightmare demo Start page should show form when loade

我正在尝试用Dream.js和Mocha运行一个示例测试,我不断得到上面的错误。以下是完整的输出:

$ mocha nightmare-chai-example.js 


  Nightmare demo
    Start page
      1) should show form when loaded


  0 passing (716ms)
  1 failing

  1) Nightmare demo Start page should show form when loaded:
     Uncaught TypeError: Cannot read property 'apply' of undefined
      at Nightmare.done (/home/user/testing/node_modules/nightmare/lib/nightmare.js:313:14)
      at Nightmare.next (/home/user/testing/node_modules/nightmare/lib/nightmare.js:291:35)
      at /home/user/testing/node_modules/nightmare/lib/nightmare.js:301:46
      at EventEmitter.<anonymous> (/home/user/testing/node_modules/nightmare/lib/ipc.js:93:18)
      at ChildProcess.<anonymous> (/home/user/testing/node_modules/nightmare/lib/ipc.js:49:10)
      at handleMessage (internal/child_process.js:695:10)
      at Pipe.channel.onread (internal/child_process.js:440:11)

我正在Oracle VM VirtualBox上运行Ubuntu16.04 LTS。

.run()
需要回调,如果没有回调,就会失败(正如您所注意到的,输出没有帮助)。这是一个非常好的例子

可能还需要指出的是,
.evaluate()
并不像您提供的要点所描述的那样工作,至少对于版本>2.x是这样。
.evaluate()
方法将尝试将被求值函数(第一个参数)后的参数作为参数发送给该函数

修改
it
调用的内部:

  new Nightmare()
    .goto(url)
    .evaluate(function() {
      return document.querySelectorAll('form').length;
    })
    .run(function(err, result){
      result.should.equal(1);
      done();
    });
还值得指出的是,
.run()
是供内部使用的,有人建议使用
实现类似承诺的功能。然后()

.run()
需要回调,如果没有回调,就会失败(正如您所注意到的那样,输出没有帮助)。这是一个非常好的例子

可能还需要指出的是,
.evaluate()
并不像您提供的要点所描述的那样工作,至少对于版本>2.x是这样。
.evaluate()
方法将尝试将被求值函数(第一个参数)后的参数作为参数发送给该函数

修改
it
调用的内部:

  new Nightmare()
    .goto(url)
    .evaluate(function() {
      return document.querySelectorAll('form').length;
    })
    .run(function(err, result){
      result.should.equal(1);
      done();
    });
还值得指出的是,
.run()
是供内部使用的,有人建议使用
实现类似承诺的功能。然后()


修好了,非常感谢!然而,当我将代码改为使用时,它每次都超时。你知道为什么吗?嗯,不是随便的。当找到解决方案时,此对话可能更适合在此处发布。这解决了问题,非常感谢!然而,当我将代码改为使用时,它每次都超时。你知道为什么吗?嗯,不是随便的。找到解决方案后,此对话可能更适合在此处发布。
  new Nightmare()
    .goto(url)
    .evaluate(function() {
      return document.querySelectorAll('form').length;
    })
    .then(function(result){
      result.should.equal(1);
      done();
    });