【问题标题】:Mocha unable to run with Nightwatch摩卡无法与 Nightwatch 一起运行
【发布时间】:2017-09-06 22:00:57
【问题描述】:

我正在使用 nighwatch.js、selenium 和 chromedriver 运行 mocha

我可以使用 describe 和 it 运行,但我正在进行动态测试,所以我需要使用以下方式调用,但我无法使用 nightwatch 以这种方式运行 mocha

"use strict";

var nightwatch = require('nightwatch');

var Mocha = require('mocha');
var Test = Mocha.Test;
var Suite = Mocha.Suite;

var mocha = new Mocha();
var suite = Suite.create(mocha.suite, 'Search Box');

suite.addTest(new Test('I\'m a dynamic test', function (done) {
    var client = nightwatch.initClient({
        silent : true
    });
    var browser = client.api();
    browser.url(browser.launch_url);
    client.start(done);
}));

mocha.run();

这是错误 正在启动 selenium 服务器...已启动 - PID: 122624

0 passing (0ms)

  Search Box
    1) I'm a dynamic test

There was an error while starting the test runner:

Error: Uncaught, unspecified "error" event. ([object Object])
    at Nightwatch.<anonymous> (E:\gitwork\AAPT-SPZA\src\frontEnd\node_modules\nightwatch\lib\runner\clientmanager.js:66:1
    at HttpRequest.<anonymous> (E:\gitwork\AAPT-SPZA\src\frontEnd\node_modules\nightwatch\lib\index.js:501:10)
    at ClientRequest.<anonymous> (E:\gitwork\AAPT-SPZA\src\frontEnd\node_modules\nightwatch\lib\http\request.js:174:12)

如何解决这个问题并让 Mocha 与 Nightwatch 一起运行?

【问题讨论】:

  • 为什么不使用专门用于 Nightwatch 的分叉 Mocha 库?如果您遵循 Nightwatch 文档,使用 Mocha 在 Nightwatch 中进行动态测试绝对是可能的。
  • @sonhu 这就是我所做的,doc 似乎不起作用。您能否在 Nightwatch 上发布您使用 Mocha 进行的工作动态测试?

标签: node.js mocha.js selenium-chromedriver nightwatch.js


【解决方案1】:

我使用类似于下面的格式在 Nightwatch.js 中使用 Mocha 实现动态测试。下面的例子不是一个真正的测试,所以不要尝试运行它,但它应该让你很好地了解如何去做。测试结果都显示为具有不同断言的不同测试。除了将 mocha 设置为测试运行器之外,conf 文件应该看起来像正常情况。

const async = require('async');
const languages = [{
    name: 'english',
    currency: '$'
    }, {
    name: 'german',
    currency: '€'
}]; 
describe('An example test', () => {
   async.each(languages, function (language) {
    it(`When I click the ${language.name} link my page should be in ${language.name}`, (browser) => {
        browser.url('http://www.google.com');
        homePage.click(`@${language.name}Link`);
        homePage.expect.element('#sub-title').text.to.equal(`Your language is ${language.name}`);
    });
   });
})

注意:使用异步库之类的东西运行异步循环非常重要,nightwatch 不会为您异步运行每个异步循环,这会导致很多错误。

【讨论】:

  • 谢谢,你知道为什么我的代码上有错误信息吗?实际上我也希望输入是动态的。首先获取输入,而不是硬编码,然后使用获取的输入创建测试用例。
  • 我不知道,但您在 Nightwatch 中使用摩卡咖啡的方式可能会推动它。 Nightwatch 是一个非常固执己见的框架,您越偏离文档的布局方式,您就越可能遇到这些类型的错误,这些错误可能涉及您需要 fork Nightwatch 才能使其正常工作。
  • 就动态输入而言,您可以使用像 npmjs.com/package/urllib-sync 这样的 npm 库摩卡。最简单的方法是 urllib-sync。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2013-06-28
  • 2013-07-11
  • 2019-03-11
  • 2020-09-24
相关资源
最近更新 更多