Jestjs Jest js Puppetter等待木偶师启动新页面返回未定义

Jestjs Jest js Puppetter等待木偶师启动新页面返回未定义,jestjs,puppeteer,Jestjs,Puppeteer,我想使用puppetter运行一个测试,我先使用puppetter设置测试,然后使用done参数完成设置 beforeAll(async (done) => { try{ browser = await puppeteer.launch({ headless: false, slowMo: 20, args: [`--window-size=${width},${height}`] }) page = await brow

我想使用puppetter运行一个测试,我先使用puppetter
设置测试,然后使用
done
参数完成设置

beforeAll(async (done) => {  
  try{
    browser = await puppeteer.launch({
      headless: false,
      slowMo: 20,
      args: [`--window-size=${width},${height}`]
    })
    page = await browser.newPage()
    await page.setViewport({ width, height })
    done()
  } catch (e){
    fail("SETUP FAILED:\n"+e)
  }
}
测试
,测试将在
之前
完成后运行,对吗

test('Test Invalid Username Password', async () => {
    try {
      await page.goto(APP_URL)
      await page.click('[data-testid="form-username"]')
      await page.keyboard.type(username)
      //omitted
    } catch (e) {
      fail('AN EXCEPTION IS THROWED\n'+e)
    }
  }, 200000);
我遇到错误
无法读取未定义“

为什么它有时返回未定义的
而有时不返回?
我想这是因为铬还没有准备好?但我已经写了
wait
,这还不够吗

铬准备好使用之前还需要检查什么?未定义

更新

未定义时的错误

Test Invalid Username Password

    Failed: "AN EXCEPTION IS THROWED
    TypeError: Cannot read property 'goto' of undefined"

      51 |       expect(errorMessage).toEqual(loginExpectedResult.TEST_INVALID_USERNAME_AND_PASSWORD)
      52 |     } catch (e) {
    > 53 |       fail('AN EXCEPTION IS THROWED\n'+e)
         |       ^
      54 |     }
      55 |   }, 200000);
      56 |

      at Env.fail (node_modules/jest-jasmine2/build/jasmine/Env.js:656:39)
      at Object.fail (test/logintest/login.test.js:53:7)
      at tryCatch (node_modules/regenerator-runtime/runtime.js:65:40)
      at Generator.invoke [as _invoke] (node_modules/regenerator-runtime/runtime.js:303:22)
      at Generator.prototype.(anonymous function) [as next] (node_modules/regenerator-runtime/runtime.js:117:21)
      at asyncGeneratorStep (test/logintest/login.test.js:17:103)
      at _next (test/logintest/login.test.js:19:194)
      at test/logintest/login.test.js:19:364
      at Object.<anonymous> (test/logintest/login.test.js:19:97)
测试无效的用户名密码
失败:“抛出异常
TypeError:无法读取未定义“”的属性“goto”
51 | expect(errorMessage).toEqual(loginExpectedResult.TEST_无效_用户名和密码)
52 |捕捉(e){
>53 |失败('抛出异常\n'+e)
|       ^
54 |     }
55 |   }, 200000);
56 |
在Env.fail(node_modules/jest-jasmine2/build/jasmine/Env.js:656:39)
at Object.fail(test/logintest/login.test.js:53:7)
在tryCatch(node_modules/registrator runtime/runtime.js:65:40)
在Generator.invoke[as _invoke](node_modules/registrator runtime/runtime.js:303:22)
在Generator.prototype.(匿名函数)[as next](node_modules/registrator runtime/runtime.js:117:21)
在asyncGeneratorStep(test/logintest/login.test.js:17:103)
下一步(test/logintest/login.test.js:19:194)
在test/logintest/login.test.js:19:364
at对象。(test/logintest/login.test.js:19:97)

fail()
可能来自jasmine?我使用VSCode autocomplete找到它。我认为它来自Jest。它不能被使用吗?

尝试更改
失败(“安装失败:\n”+e)
调用
控制台.log(“安装失败:\n”+e)
,并让我们知道它记录了什么

我在开始复制您的问题时遇到了相同的问题,因为我忘记了一个
require('puppeter')
命令,例如

还有一些考虑:

  • 你不需要一个
    done()
    调用,
    beforeAll
    函数是异步的,你需要等待每一个木偶师调用,因此…函数本身终止,而不需要
    done()
    调用。甚至从传递的参数中删除它

  • 您调用
    fail
    ,但它是在哪里定义的

  • 删除所有内容周围的大的
    try/catch
    ,如果出现错误,测试会自动失败,并提供有用的见解,额外的
    try/catch
    环境不会给您带来任何好处,也不会使您的测试更加冗长

请告诉我是否有用尝试更改
失败(“安装失败:\n”+e)
调用
控制台.log(“安装失败:\n”+e)
,并告诉我们它记录了什么

我在开始复制您的问题时遇到了相同的问题,因为我忘记了一个
require('puppeter')
命令,例如

还有一些考虑:

  • 你不需要一个
    done()
    调用,
    beforeAll
    函数是异步的,你需要等待每一个木偶师调用,因此…函数本身终止,而不需要
    done()
    调用。甚至从传递的参数中删除它

  • 您调用
    fail
    ,但它是在哪里定义的

  • 删除所有内容周围的大的
    try/catch
    ,如果出现错误,测试会自动失败,并提供有用的见解,额外的
    try/catch
    环境不会给您带来任何好处,也不会使您的测试更加冗长

让我知道这是否有帮助我已经更新了问题,哦,我在哪里可以找到那些在
之前等待异步函数完成的文档呢?我只能找到使用和使用。我刚开始使用jest,我使用了try catch,因为显然如果我没有,有时它会跳到
毕竟
返回错误。上一个例外没有打印出来。所以我不知道发生了什么,因为我的内存几乎满了?我很难打开chromium,因为我的内存使用率超过92%。我尝试停止占用我大部分内存的docker服务,它工作了。但我不知道我已经更新了答案,并详细解释了async/await。请注意,它与Jest本身无关,而是与
async/await
API的工作方式有关。无论如何,我希望它能帮助您。让我知道它是否足够清晰,以防接受答案。感谢
async/await
的解释!有时我仍然会遇到错误,可能是因为我的内存被占用了吗?有时甚至更高RoR,有时我得到错误<代码> JEST在测试运行完成后没有退出1秒。这通常意味着在测试中没有停止的异步操作。考虑运行JEST与DeTeCopeNoad来解决这个问题。< /代码>我已经更新了问题,哦,我在哪里可以找到“<代码>”的文档?首先
等待异步函数完成?我只能找到using和using。我刚开始使用jest,我使用try-catch,因为很明显,如果我有时不使用,它会跳到
,毕竟
会返回错误。前面的异常没有打印出来。所以我不知道发生了什么,因为我的内存是almos未满?我很难打开chromium,因为我的内存使用率超过92%。我尝试停止占用我大部分内存的docker服务,但它起了作用。但我不知道我已经更新了答案,详细解释了async/await。请注意,它与Jest本身无关,而是与
async/await
API的工作方式有关。总之,我希望它能帮助你。让我知道它是否足够清晰,以防接受答案,感谢
async