-1

练习使用 mocha chai 和 nightmare 运行测试。在我进入评估块之前,一切似乎都有效。

var Nightmare = require('nightmare'),
  should = require('chai').should()

describe('Frontend Masters', function() {
  this.timeout(20000);

  it('should show form when loaded', function(done) {
    var nightmare = new Nightmare({show: true})
    nightmare
      .goto('https://frontendmasters.com/')
      .wait('a[href*="https://frontendmasters.com/login/"]')
      .click('a[href*="https://frontendmasters.com/login/"]')
      .wait('#rcp_login_form')
      .evaluate(function() {
        return window.document.title;
      }, function(result) {
        result.should.equal('Login to Frontend Masters');
        done();
      })
      .run(function(){
        console.log('done')
      });
  });
});

我已经输入了控制台日志,但它从未进入评估。我尝试将几个选择器传递给我的 wait() 函数,但它似乎没有效果。我收到的唯一错误是我的超时已超出。但不管我设置多久

4

1 回答 1

1

你用的是什么版本的噩梦?

的签名.evaluate()已更改,我认为这可能是您问题的根源。您传入的第二个函数(过去用于处理评估结果的函数)实际上是作为第一个参数的参数传递的.evaluate()。换句话说,第二个参数永远不会运行,done()永远不会被调用,并且您的测试将超时。

另外值得一提的是:.run()不直接支持。改为使用.then()

最后,让我们修改您的源代码以反映上述内容以帮助您入门:

var Nightmare = require('nightmare'),
  should = require('chai')
  .should()

describe('Frontend Masters', function() {
  this.timeout(20000);

  it('should show form when loaded', function(done) {
    var nightmare = new Nightmare({
      show: true
    })
    nightmare
      .goto('https://frontendmasters.com/')
      .wait('a[href*="https://frontendmasters.com/login/"]')
      .click('a[href*="https://frontendmasters.com/login/"]')
      .wait('#rcp_login_form')
      .evaluate(function() {
        return window.document.title;
      })
      .then(function(result) {
        result.should.equal('Login to Frontend Masters');
        console.log('done')
        done();
      })
  });
});
于 2016-08-24T15:05:04.247 回答