0

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

我有这个跑步者供我测试。我测试了一个 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_HOSTHOST,它照常工作并在干净的新浏览器窗口中运行。

至少现在这不是一个大问题,但这是出乎意料的行为,我不明白为什么它会这样工作。

我对 Node 和 React 不是很熟悉,也许这与它们有关。

规格:macOS 10.12.5、Testcafe 0.20.3、Chrome 67

4

1 回答 1

1

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

.browsers(isCiEnv ? 'chromium --no-sandbox --disable-gpu' : 'chrome') 
于 2018-07-17T10:09:22.470 回答