【发布时间】:2017-08-11 12:41:56
【问题描述】:
目前我试图弄清楚如何在 localhost:3000/run/tests 资源的 GET 请求上运行 mocha 测试。
大多数事情似乎工作正常,但 mocha .on('end') 可能没有正确触发,所以我的 res.json(...) 函数没有被调用并且节点仍然挂起。
var Mocha = require('mocha');
...
app.get('/run/tests', (req, res) => {
var mocha = new Mocha({
reporter: 'json'
});
myTestFiles.forEach(testfile => mocha.addFile('./tests/' + testfile + '.js'));
mocha.run()
.on('end', function() {
console.log(this.testResults);
res.json(this.testResults);
});
});
我得到了预期的输出,除了“0通过”行:
> ...
> CALL element.text()
> GET /session/:sessionID/element/9/text
> RESPONSE element.text() "Username"
√ App login finished: 37685ms
0 passing (0ms)
0 passing (16ms)
我的测试文件如下所示:
'use strict';
require('./helpers/setup');
var wd = require('wd');
var serverConfigs = require('./helpers/appium-servers');
describe('Carnet App', function () {
this.timeout(120000);
var driver;
var allPassed = true;
before(function () {
var serverConfig = serverConfigs.local;
driver = wd.promiseChainRemote(serverConfig);
require('./helpers/logging').configure(driver);
var desired = {
'appium-version': '1.4.16',
platformVersion: '6.0.1',
device: 'Android',
platformName: 'Android',
app: myapp.apk'
};
return driver
.init(desired)
.setImplicitWaitTimeout(120000);
});
after(function (done) {
return driver
.quit()
.done();
});
afterEach(function () {
allPassed = allPassed && this.currentTest.state === 'passed';
});
it('App login finished', function () {
return driver
.elementById('...')
.click()
.sendKeys('...')
.elementById('...')
.text().should.become('Username');
});
});
我犯错了吗?有人以编程方式使用 wd + mocha 过期吗?感谢您的帮助!
【问题讨论】:
-
看起来它是一个异步问题......所以你的工作在测试执行之前完成。在您的
it()函数中向底部...传递done到您的回调中并在should.become下方调用done()。 -
您的意思是
it('App login finished', function (*done*) {和.done();在.text().should.become('Username')之后?似乎这也从未完成 mocha 过程......但是如果我将mocha.run().on('end'.... 更改为mocha.run(function (failures) { res.json({}) }这似乎工作并在 mocha 完成测试后调用res.json。但我无法对单个“测试结束”事件做出反应。 -
github.com/mochajs/mocha/wiki/Using-mocha-programmatically 似乎您可能使用不同的事件处理程序,因为它们在传递给
.run()的 cb 中被调用
标签: node.js selenium mocha.js appium