这实际上不是问题,但是我不完全了解发生了什么以及为什么。
我有这个跑步者来测试。我测试了一个React应用。
let testcafe = null
const isCiEnv = process.env.CI === 'true'
const exit = async err => {
console.log('Exiting...')
if (testcafe) {
console.log('Closing TestCafe...')
testcafe.close()
}
console.log('Exiting process...')
process.exit(err ? 1 : 0)
}
console.log('Is CI ENV: ', isCiEnv)
console.log('Creating TestCafe...')
createTestCafe('localhost', 1337, 1338)
.then(tc => {
testcafe = tc
})
.then(() => {
console.log('Starting server...')
return startServer()
})
.then(() => {
console.log('Starting client...')
return startClient()
})
.then(() => {
console.log('Creating TestCafe Runner...')
return testcafe.createRunner()
})
.then(runner => {
console.log('About to start TestCafe Runner...')
return runner
.src([
'test/e2e/fixtures/auth.js'
])
.browsers({
path: isCiEnv
? '/usr/bin/chromium-browser'
: 'Chrome',
cmd: isCiEnv
? '--no-sandbox --disable-gpu'
: undefined
})
.screenshots('screenshots', true)
.run({
skipJsErrors: true,
selectorTimeout: 25000,
assertionTimeout: 25000
})
})
.then(failedCount => {
console.log('failed count:', failedCount)
return exit(failedCount)
})
.catch(err => {
console.error('ERR', err)
return exit(err)
})
在package.json中,我有此命令用于运行测试
"test:e2e": "HOST=0.0.0.0 NODE_ENV=test NODE_PATH=server babel-node test/e2e/index.js --presets stage-2"
但是在本地环境中,我使用此命令运行测试
sudo REDIS_HOST=127.0.0.1 PORT=80 yarn test:e2e
那是因为在我的本地计算机上我有不同的配置,并且我不想为其他所有人更改它。
通常,测试在不同的清晰版本的浏览器中运行,没有任何帐户数据,插件等。但是在这种情况下,测试在新的浏览器窗口中运行,但使用所有插件和我的帐户名。但是,它通常没有浏览器窗口中的cookie和会话身份验证数据,因为我通常在其中工作(因为我在工作浏览器中已在网站上进行了授权,而在测试浏览器中未进行身份验证)。
如果我将“ Chrome”更改为“ chrome”,它将完全停止运行。 Firefox和Safari的行为相同。
更早之前,它没有传递 REDIS_HOST 和 HOST ,它照常工作,并在全新的浏览器窗口中运行。
至少到目前为止,这不是一个大问题,但这是意料之外的行为,我不明白,为什么这样做会如此。
我对Node和React不太熟悉,也许这与它们有关。
规格:macOS 10.12.5,Testcafe 0.20.3,Chrome 67
答案 0 :(得分:1)
使用{ path, cmd }
指定浏览器是一个古老的低级选项,您不应使用它。以这种方式指定浏览器时,TestCafe不会尝试猜测浏览器的类型(Chrome,Firefox),并且不会执行高级初始化步骤(例如创建干净的配置文件)(因为配置文件结构取决于浏览器的类型)。因此,最好使用以下运行程序代码:
.browsers(isCiEnv ? 'chromium --no-sandbox --disable-gpu' : 'chrome')