jestjs - Jest-Puppeteer - 期望调用一个断言,但接收到零个断言调用
问题描述
此脚本正在登录站点。这是我的第一个笑话测试。测试前的最后一行单击 ul 下拉列表中的 li。然后我们导航到带有 url https://uat2.onplanapp.com/#/的新页面
作为一个简单的测试,我试图检查这确实是新页面的 url。当我在浏览器中观看时,脚本会登录并导航到正确的页面。
得到如下所示的错误。
代码
/**
* @name Onplan Login
* @desc Logs in and test for correct page title
*/
const puppeteer = require('puppeteer');
const assert = require('assert');
let browser;
let page;
beforeAll(async () => {
browser = await puppeteer.launch({
headless: false,
devtools: true
//slowMo: 50
});
const page = await browser.newPage();
await page.goto('https://uat2.onplanapp.com/#/sheet/139');
await page.waitFor(500);//was 500
await page.waitFor('#inputEmail');
await page.type('#inputEmail', 'xxx@yyy');
await page.type('#inputPassword', '1111');
await page.click('button');//Login
await page.waitForNavigation();
await page.waitFor(100);//was 500
// SELECT COMPANY ON NEXT PAGE
await page.waitFor('#logn-screenv > form > div.row.logn-screenbody.pb-4.pt-3.px-2 > div:nth-child(2) > div > div > div.css-1hwfws3.custom-scrollbar__value-container > div.css-151xaom-placeholder.custom-scrollbar__placeholder');
await page.click('#logn-screenv > form > div.row.logn-screenbody.pb-4.pt-3.px-2 > div:nth-child(2) > div > div > div.css-1hwfws3.custom-scrollbar__value-container > div.css-151xaom-placeholder.custom-scrollbar__placeholder');//Login
// SELECT COMPANY
await page.waitFor(500);// was 1000
// click dropdown to show list of companies
await page.click('#react-select-2-option-2'); //Test company
await page.waitFor(300);//was 1000
// click list item to select company
await page.click('button[class="btn btn-block mt-3"]');
// now navigate to company page
})
test('url should be correct"', async () => {
expect.assertions(1);
const url = await page.url;
await assert(url === 'https://uat2.onplanapp.com/#/');
});
afterAll(async () => {
//await browser.close()
})
错误信息
onplan_jest@1.0.0 测试 F:\Projects\onplan_jest jest
FAIL ./login.test.js (6.165 s) × url 应该是正确的" (2 ms)
● url 应该是正确的”
Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error: Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.
at mapper (node_modules/jest-jasmine2/build/queueRunner.js:29:45)
● url 应该是正确的”
TypeError: Cannot read property 'url' of undefined
43 |
44 | expect.assertions(1);
> 45 | const url = await page.url;
| ^
46 | await assert(url === 'https://uat2.onplanapp.com/#/');
47 | });
48 |
at Object.<anonymous> (login.test.js:45:28)
● url 应该是正确的”
expect.assertions(1)
Expected one assertion to be called but received zero assertion calls.
42 | test('url should be correct"', async () => {
43 |
> 44 | expect.assertions(1);
| ^
45 | const url = await page.url;
46 | await assert(url === 'https://uat2.onplanapp.com/#/');
47 | });
at Object.<anonymous> (login.test.js:44:12)
测试套件:1 个失败,总共 1 个测试:1 个失败,总共 1 个快照:总共 0 个时间:6.316 秒,估计 7 秒运行所有测试套件。测试运行完成后一秒钟,Jest 没有退出。
这通常意味着在您的测试中没有停止异步操作。考虑运行 Jest--detectOpenHandles
来解决此问题。
错误信息结束
解决方案
我能够使用以下代码进行第一次测试。大部分问题是我在 beforeAll 中有代码,我需要进入测试。这是有效的代码。
* @name Onplan Login
* @desc Logs in and test for correct page title
*/
const puppeteer = require('puppeteer');
const assert = require('assert');
let browser;
beforeAll(async () => {
browser = await puppeteer.launch({
headless: false,
devtools: false,
slowMo: 50
});
})
describe('url should be correct"', () => {
test('url is correct', async () => {
const page = await browser.newPage();
await page.goto('https://uat2.onplanapp.com/#/sheet/139');
await page.waitFor(500);//was 500
await page.waitFor('#inputEmail');
await page.type('#inputEmail', 'mayank@onplan.co');
await page.type('#inputPassword', '123456');
await page.click('button');//Login
await page.waitForNavigation();
await page.waitFor(100);//was 500
// SELECT COMPANY ON NEXT PAGE
await page.waitFor('#logn-screenv > form > div.row.logn-screenbody.pb-4.pt-3.px-2 > div:nth-child(2) > div > div > div.css-1hwfws3.custom-scrollbar__value-container > div.css-151xaom-placeholder.custom-scrollbar__placeholder');
await page.click('#logn-screenv > form > div.row.logn-screenbody.pb-4.pt-3.px-2 > div:nth-child(2) > div > div > div.css-1hwfws3.custom-scrollbar__value-container > div.css-151xaom-placeholder.custom-scrollbar__placeholder');//Login
// SELECT COMPANY
await page.waitFor(500);// was 1000
// click dropdown to show list of companies
await page.click('#react-select-2-option-2'); //Test company
await page.waitFor(300);//was 1000
await page.click('button[class="btn btn-block mt-3"]');
//now we go to first page
const url = await page.url();
expect(url).toBe('https://uat2.onplanapp.com/#/');
}, 20000);
});
推荐阅读
- authentication - 当我们已经在 API 网关级别进行授权时,再次在微服务级别验证授权是否是一种好习惯?
- elasticsearch - 如何从rabbitmq读取多个队列消息到logstash?
- python - Pandas 模糊匹配
- git - 从 GitHub 存储库中检出文件夹的内容,而不是使用 sparse-checkout 检出文件夹本身
- python - 同一网站上每个相同页面的类别都会发生变化。我正在尝试从页面上抓取描述
- python - 释放鼠标键后停止运行功能
- javascript - 使用 forEach 或 for 循环 (JS) 从 JSON 提要填充表单字段
- python - 如何在更改 tkinter 文本小部件时获得回调?
- android - 由于用户角色而使按钮消失(kotlin)
- c++ - 使用“无符号短”数据类型会中断循环