【发布时间】:2019-10-08 02:49:49
【问题描述】:
成功完成场景后,cucumberjs 无限期挂起。我怎样才能让它停止?
我在 npm/nodejs 上运行了一个 cucumberjs。
package.json:
{
"name": "foo-test-automation",
"version": "1.1.0",
"description": "Integration Regression UI Test Automation for Foo application",
"main": "fooAutoTest.js",
"scripts": {
"start": ". .env; node ./node_modules/.bin/cucumber-js --tags @RegressionTestSuite --format json:./results/log_`date +\\\"%Y\\\\%m\\\\%d_%H%M\\\"`.json",
},
完成后,cumber 似乎在后台运行
$ npm run new
............................
5 scenarios (5 passed)
28 steps (28 passed)
0m37.701s
我在寻找挂起的进程:
Hucks-MacBook-Pro:~ huckcarignan$ ps aux | grep node
huckcarignan 25252 0.0 0.0 4287512 856 s004 S+ 12:30PM 0:00.00 grep node
huckcarignan 18365 0.0 0.2 4652124 40804 s000 S+ 11:33AM 0:02.64 node ./node_modules/.bin/cucumber-js --tags @New --format json:./results/log_"20190521_1133".json
huckcarignan 18362 0.0 0.0 4280924 868 s000 S+ 11:33AM 0:00.01 sh -c . .env; node ./node_modules/.bin/cucumber-js --tags @New --format json:./results/log_`date +\"%Y\\%m\\%d_%H%M\"`.json
所以我什么都没有。
我是否在我的 hooks.js 中遗漏了什么:
const { BeforeAll, AfterAll } = require('cucumber');
const puppeteer = require('puppeteer');
const timestamp = require('time-stamp');
require('dotenv').config();
BeforeAll(async function() {
this.browser = await puppeteer.launch({
headless: (process.env.HEADLESS === 'true'),
slowMo: parseInt(process.env.SLOWMO),
defaultViewport: {
width: parseInt(process.env.SCREEN_SIZE_WIDTH),
height: parseInt(process.env.SCREEN_SIZE_HEIGHT)
}
});
this.page = await this.browser.newPage();
});
AfterAll(async function() {
// Teardown browser
if (this.browser) {
await this.browser.close();
}
});
任何帮助将不胜感激。
更新 1 我尝试将 AfterAll 替换为: // 异步承诺 毕竟(函数(){ 返回 Promise.resolve(); });
但它仍然挂起(但浏览器打开)
【问题讨论】:
-
no
this在AfterAll挂钩中。你如何设置浏览器? -
嗯....我不能不同意你的观点,它就在文档中,但现在我想知道为什么 this 的其他引用有效?
-
如果没有
this(没有调用函数的对象),this将指向 Node.js 中的global对象。因此,您两次都将属性browser放在global对象上。你的测试真的有效吗?您在那里通过this.browser访问浏览器吗?因为我真的看不到那个工作...... -
是的,我的测试确实有效。我可以使用 puppeteer 拨打电话。我必须用标签将“this”移到前面。
-
this.browser是否实际上设置在AfterAll调用中?也许你从来没有在那儿打电话给this.browser.close()?
标签: node.js npm puppeteer cucumberjs