angular - Angular E2E 测试脚本超时
问题描述
我是 Angular 的新手,我用它创建了一个项目,到目前为止运行良好。但现在我想给它添加一些测试。
不幸的是,我无法让它工作。
所以我的应用程序是一个基本的待办事项应用程序。
在测试中,我想检查是否创建了任务。
这是我的任务-form.po.ts
import { by, element, ElementArrayFinder, ElementFinder } from 'protractor';
export class TaskForm {
get taskCreateButton(): ElementFinder {
return element(by.css('#task-create-btn'));
}
get taskListItems(): ElementArrayFinder {
return element.all(by.css('mat-list-item'));
}
get taskForm(): ElementFinder {
return element(by.id('task-form'));
}
get taskFormInput(): ElementFinder {
return element(by.id('mat-input-0'));
}
}
app.e2e-spec.ts
...
describe('TaskForm', () => {
let taskForm: TaskForm;
let startCount: number;
let createBtn: ElementFinder;
let taskListItems: ElementArrayFinder;
let taskFormNewInput: ElementFinder;
let newTaskItemsNum: number;
beforeEach( () => {
taskForm = new TaskForm();
createBtn = taskForm.taskCreateButton;
taskListItems = taskForm.taskListItems;
taskFormNewInput = taskForm.taskFormInput;
taskListItems.count().then((originalCount: number) => {
startCount = originalCount;
});
});
it('should enter test task to task form', async () => {
await taskFormNewInput.clear().then(() => {
taskFormNewInput.sendKeys('This is a test task');
});
taskFormNewInput.getAttribute('value').then(taskInput => {
expect(taskInput).toEqual('This is a test task');
});
});
it('should add a task', async () => {
await taskFormNewInput.clear().then(() => {
taskFormNewInput.sendKeys('This is a test task');
});
await createBtn.click();
newTaskItemsNum = await taskForm.taskListItems.count();
expect(newTaskItemsNum).toBe(startCount);
});
});
该任务将被添加,但随后它在脚本超时中运行。
我尝试了几件事,但要么不会创建任务,要么它正在脚本超时中运行。
解决方案
https://stackoverflow.com/a/66072132/6793637
阅读上面的堆栈溢出以了解如何使用 protractor-jasmine(javascript 不是类型脚本)
但方法和设计保持不变。
使用 Type 脚本时使用:使用 ES2017 作为此版本中引入的 await
https://blog.logrocket.com/async-await-in-typescript/
还有一些好的做法:
- 如果规范(It 块)花费更长的时间 Jasmine.Default_timeout,则将测试用例拆分为更小的用例
- 如果您确实需要更多时间,请在配置文件或每个规范中设置:
从配置中设置:
https://www.protractortest.org/#/timeouts
对于所有脚本超时增加 config.allScriptsTimeout:
allScriptsTimeout: timeout_in_millis
对于默认超时错误,请在 config.jasmine.Opts 中使用它
jasmineNodeOpts: {defaultTimeoutInterval: timeout_in_millis}
推荐阅读
- java - Spring Boot Batch 写入空文件
- apache - 如何为 GET 请求正确配置 Apache 重写规则?
- angular - TypeError:订阅()后无法读取未定义的属性“id”
- sql - SQL 结果中的任何唯一组合
- python - 编辑 discord.py 嵌入,就好像有人对其“评论”过一样
- python - 按出现的顺序列出类属性
- javascript - 使用套接字 io 的 Angular 简单聊天应用程序,将消息附加到对话参考后出现
- python - 经过这么多调用,API(没有使用限制)开始返回 API返回
- python - 如何在谷歌云视觉 API 中直接发送 base 64 编码的图像字符串?
- sql - SQL 语句 join where 如果一个条件不满足,则执行另一个条件