使用 nightwatch 和 mocha runner 进行异步测试

Async test with nightwatch and mocha runner

我正在尝试使用 nightwatch.js 和 mocha runner 定义一些测试。我想测试我的 javascript 库如何在不同的浏览器上工作。

我的代码相当简单,看起来像那样

const expect = require('chai').expect;

describe('InfinitiSpec', function() {

  beforeEach((client, done) => {
    client.url(`file://${__dirname}/../../dist/index.html`);
    done();
  });

  after((client, done) => {
    client.end(() => done());
  });

  it('should be five', (client) => {
    client.execute(function() {
      // test javascript here
    }, [], () => {
      expect(2 + 2).to.equal(5)
    });
  });
});

我遇到的问题是 nightwatch 没有将 done 回调传递给测试,因此即使在单个测试断言失败的情况下,测试本身看起来仍然是成功的。

vladmiller:infiniti-tracking-evolution vladmiller$ nightwatch 


  InfinitiSpec
 ✖ AssertionError: expected 4 to equal 5
    at Object.<anonymous> (/Users/vladmiller/Projects/xxx/xxx/test/browser/infiniti.spec.js:18:24)
    at HttpRequest.<anonymous> (/usr/local/lib/node_modules/nightwatch/lib/index.js:322:20)
    at emitTwo (events.js:87:13)
    at HttpRequest.emit (events.js:172:7)
    at HttpRequest.<anonymous> (/usr/local/lib/node_modules/nightwatch/lib/index.js:351:15)
    at emitThree (events.js:97:13)
    at HttpRequest.emit (events.js:175:7)
    at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/nightwatch/lib/http/request.js:155:16)
    at emitNone (events.js:72:20)
    at IncomingMessage.emit (events.js:166:7)
    ✓ should be five (3322ms)


  1 passing (3s)

如何使用 nightwatch + mocha + chai 测试异步 javascript?也许有人可以推荐更好的堆栈来测试 selenium 中的 JS? 谢谢

Nightwatch 使用不支持异步测试的修补版 mocha。解决方案是改用标准 mocha,但相关文档 (http://nightwatchjs.org/guide#using-the-standard-mocha) 不完整,您将无法访问该上下文中的页面对象。

在花了一个小时尝试使用标准 mocha 设置 Nightwatch 之后,我决定回到普通的 Selenium Webdriver。老实说,我不后悔。

如果您需要有关如何仅使用 Selenium 制作类似 Nightwatch 的页面对象的建议,请查看 http://marmelab.com/blog/2016/04/19/e2e-testing-with-node-and-es6.html