在命令中传递.env变量进行运行测试时,浏览器的行为不同

时间:2018-07-12 15:19:16

标签: node.js testcafe

这实际上不是问题,但是我不完全了解发生了什么以及为什么。

我有这个跑步者来测试。我测试了一个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

1 个答案:

答案 0 :(得分:1)

使用{ path, cmd }指定浏览器是一个古老的低级选项,您不应使用它。以这种方式指定浏览器时,TestCafe不会尝试猜测浏览器的类型(Chrome,Firefox),并且不会执行高级初始化步骤(例如创建干净的配置文件)(因为配置文件结构取决于浏览器的类型)。因此,最好使用以下运行程序代码:

.browsers(isCiEnv ? 'chromium --no-sandbox --disable-gpu' : 'chrome')