- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个非常简单的应用程序,它有一个输入框和一个按钮。
Input 用于输入email
使用事件处理器订阅按钮
输入电子邮件并点击按钮将进行 api 调用,(此方法有效)
subscribeEmail() {
this.error = '';
if (this.userForm.controls.email.status === 'VALID') {
const params = new HttpParams()
.set('EMAIL', this.userForm.controls.email.value)
.set('subscribe','Subscribe')
.set('b_aaa7182511d7bd278fb9d510d_01681f1b55','')
console.log(params);
const mailChimpUrl = this.mailChimpEndpoint + params.toString();
this.http.jsonp<MailChimpResponse>(mailChimpUrl, 'c').subscribe(response => {
console.log('response ', response)
if (response.result && response.result !== 'error') {
this.submitted = true;
}
else {
this.error = response.msg;
}
}, error => {
console.error(error);
this.error = 'Sorry, an error occurred.';
});
}
}
A complete working example here
没有问题,您也可以检查一切正常。
要求:我需要涵盖此按钮点击和带参数的 http 调用的测试用例。
我无法编写测试用例,它显示测试未涵盖带参数的 http 调用。
我为实现按钮点击场景而编写的测试,例如,
describe('HelloComponent', () => {
let component: HelloComponent;
let fixture: ComponentFixture<HelloComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
ReactiveFormsModule
],
declarations: [HelloComponent]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(HelloComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('check subscribeEmail function has value', (done: DoneFn) => {
const subscribeButton = fixture.debugElement.query(By.css('.subscribe'));
subscribeButton.triggerEventHandler('click', {});
done();
});
});
还有 Working stackblitz with test cases here
(请查看 hello.component.spec.ts )
对于按钮点击,我已经介绍过了并且它有效
const subscribeButton = fixture.debugElement.query(By.css('.subscribe'));
subscribeButton.triggerEventHandler('click', {});
你能帮我实现覆盖带有参数的http调用的按钮点击的测试用例的结果吗?
更新:经过一番搜索后,我发现我可以使用 httpmock 来调用带有参数的 url,但我以错误告终,
Error: Expected one matching request for criteria "Match URL: https://gmail.us10.list-manage.com/subscribe/post-json?u=aaa7182511d7bd278fb9d510d&id=01681f1b55&", found none.
您还可以看到 Modified stackblitz with httpMock here...
毕竟我只是在尝试发表这篇文章,所以请考虑这个问题并提供正确的解决方案。
提前致谢。
最佳答案
这是一个很长的问题,我知道您花了很多时间来创建它。因此,我也花了一些时间来重构代码以使其符合最佳实践。这将需要将您的代码拆分为服务,并使代码更好地进行单元测试。 (组件和服务的单元测试)
MyService
并将http
代码移入其中。它将帮助您分别对 component
和 service
进行单元测试。我创建如下:export class MyService {
mailChimpEndpoint = 'https://gmail.us10.list-manage.com/subscribe/post-json?u=aaa7182511d7bd278fb9d510d&id=01681f1b55&';
constructor(private _http: HttpClient) {}
submitForm(email: string){
const params = new HttpParams()
.set('EMAIL', email)
.set('subscribe','Subscribe')
.set('b_aaa7182511d7bd278fb9d510d_01681f1b55','')
const mailChimpUrl = this.mailChimpEndpoint + params.toString();
return this._http.jsonp<MailChimpResponse>(mailChimpUrl, 'c')
}
}
为组件 as you can see here in the stackblitz 创建单元测试.仔细查看重构代码以及我如何根据场景涵盖所有案例。正如我已经在 your previous question 中解释的那样, 你可以测试 MatSnackBar
调用
同样可以引用one my of my articles to test a service编写服务的单元测试。
关于javascript - 如何以 Angular 覆盖按钮点击测试? (附 Stackblitz),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62130441/
好吧,在 StackBlitz 中说“找不到包:src”。我已经阅读了这里的问题,我一直在尝试接下来的事情: Can't find packages in stackblitz, even thoug
我有一个 angular 项目,我知道可以在 StackBlitz 中打开一个 github 项目,但是对 StackBlitz 项目所做的更改呢?是否可以在不将代码下载到您的 PC 的情况下提交到
我试图让我的 Angular 应用程序在 Stackblitz 中启动,但它不断抛出错误消息“找不到包:[空白]: Stackblitz link 我以与 VS Code 完全相同的方式设置项目,并尝
当我在 https://stackblitz.com/ 上创建一个新项目时,名称是自动生成的,看起来像这样 https://angular-h9csji.stackblitz.io 。但是,我见过其他
我截图了。我想删除显示“删除此项目”的项目。该按钮不再出现。它曾经是当我们将鼠标悬停在项目链接上时出现的东西(我在屏幕截图中将鼠标悬停在它上面,但鼠标没有被捕获): 最佳答案 现在似乎有某些地方可以删
我在一个输出警报的按钮中有基本的 onClick function test(){ alert('here'); } Press 在 StackBlitz 中这不起作用 - https://sta
我正在使用 Stackblitz 练习 angularJS,当我尝试在 app.module.ts 文件中导入组件时出现错误。 Import error, can't find file: ./her
问题: 如何在浏览器中运行实时开发服务器? 上下文 Stackblitz和 CodeSandbox是两个提供在线 IDE 来开发 Web 应用程序的平台。我有一个类似的用例,需要在浏览器开发服务器中运
我在 Stackblitz 工作,我的一个文件是一个带有一些数据的 JSON 文件。我想将此 JSON 数据放入我的 javascript 文件 index.js .但是怎么做? 当我尝试使用 xhr
我有以下情况,我有 Player 组件,它接收数字数组作为输入,在用户操作时该组件从该数组中发出最大数字。 在该组件旁边有一个或多个 Bot 组件,一旦 Player 组件执行该操作,Bot 组件应该
有没有办法在 stackblitz 上声明依赖版本。我已经更新了对 NPM 的依赖,但 stackblitz 仍然坚持安装旧版本。 最佳答案 当你这样做时发生了什么@ ? 看这里:https://st
我更新了这个 stackblitz https://stackblitz.com/edit/template-driven-form-demo-bnezpz?file=app/user-form/us
在尝试复制我遇到的另一个问题时,我尝试使用 StackBlitz 来复制。 但是 Angular Material 似乎在 StackBlitz 上不起作用......关于我可能做错了什么的任何建议或
我在 .Net Core 2 和 Angular 6 中有一个网站。我正在尝试用 Angular 或 javaScript 创建一个代码编辑器,它将与网站的一部分进行交互,从父级到嵌入方向,而不是相反
你能告诉我如何将 scss 文件添加到 stackblitz 中吗?我试过了。但它不起作用。请查看并告诉我。 我尝试添加home.html 这是元素: stackblitz 最佳答案 Scss 应该在
我正在尝试在 StackBlitz 中使用此语法: const someObject = {}; for (let [key, value] of Object.entries(someObject)
有没有办法导出使用“TypeScript Blank Project”模板在 StackBlitz 上创建的 TypeScript 项目并在其他任何地方运行它? 如果您只是下载它,您将得到一个空的 p
目标: 通过我本地计算机上的本地爱好项目中使用的代码显示来自 API 的图片。 问题: 当我将 stackblitz 中的代码用于本地计算机时,出现错误 TS2339: Property 'avata
我wrote this article我正在尝试嵌入相应的 Stackblitz 示例。 我点击分享并选择 preview only然后将链接粘贴到媒体中: https://stackblitz.co
我已导入 Material (7.2.1) 在我的 stackblitz 关联, Still I am unable see the exact UI of material 我试图弄清楚,但没有结果
我是一名优秀的程序员,十分优秀!