angular - Angular 模板驱动表单中的 Karma-Jasmine 测试注册表单
问题描述
我对 Angular 很陌生。我正在尝试对模板驱动的表单进行 Jasmine 测试,但我被卡住了。
这是我的.html文件
<form name="Registerform" #Registerform="ngForm" (ngSubmit)="registerUser()" class="form">
<div class="form-header">
<h1 style="text-align: center;font-weight: bold; ">Register</h1>
</div>
<small class="text-danger">{{msg}}</small>
<div class="row">
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" placeholder="Enter email" name="email"
[(ngModel)]="user.emailId" required pattern="^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$" #email="ngModel"
[class.is-invalid]="email.invalid && email.touched">
<!--<small class="text-danger" [class.d-none]="email.valid || email.untouched">Email Id is required
field</small>-->
<div *ngIf="email.errors && (email.invalid && email.touched)">
<small class="text-danger" *ngIf="email.errors.required">Email Id is required</small>
<small class="text-danger" *ngIf="email.errors.pattern">Enter the valid valid email id</small>
</div>
</div>
</div>
<button [disabled]=" Registerform.form.invalid" type="submit" class="btn btn-primary">Register</button>
<small class="float-right" [routerLink]="['/login']">Having an Account ? <a href="/login">Login</a>
here</small>
</form>
这是.ts文件
export class RegisterComponent implements OnInit {
user = new User();
msg = "";
roles: any = ['Admin', 'Employee'];
constructor(private _service: RegistrationService, private _router: Router) { }
ngOnInit(): void {
}
radioChangedHandler(event: any) {
this.user.role = event.target.value;
}
registerUser() {
this._service.registerUserFromRemote(this.user).subscribe(
data => {
console.log("response received");
this.msg = "Registration Successful"
this._router.navigate(['/login']);
},
error => {
console.log("exception occured")
// this.msg = error.error();
}
)
}
}
这是用户类
export class User {
id: number | undefined;
emailId: string | undefined;
userName: string | undefined;
password: string | undefined;
cpassword: string | undefined;
role: string | undefined;
walletAmt: number | undefined;
constructor() { }
}
我试图为组件和电子邮件制作一个测试用例。但我得到了“没有期望”的错误。
这是我的 .spec 文件
it('email should be correct', async () => {
fixture.whenStable().then(() => {
let email = component.user.emailId;
email = "abc@gmail.com";
expect(email).toBeTruthy();
});
})
it('email should be false', async () => {
fixture.whenStable().then(() => {
let email = component.user.emailId;
let val = component.registerUser()
email = '';
expect(email).toBeFalsy();
});
})
解决方案
期望在无法访问的代码中。then
使用这种方法的回调将在测试完成后执行。您可以利用非常方便await
的语法使其可访问。
it('email should be correct', async () => {
await fixture.whenStable();
let email = component.user.emailId;
expect(email).toBeTruthy();
})
it('email should be false', async () => {
await fixture.whenStable();
let val = component.registerUser()
let email = component.user.emailId;
expect(email).toBeFalsy();
})
在查看测试代码时,要掌握测试的内容并不容易。
PS:模板驱动的表单在单元测试中表现不佳。总的来说,这种方法不如反应形式强大。我宁愿避免试图用测试覆盖那些,并花时间学习反应形式。
推荐阅读
- python - Python randint 生成具有相同位数的数字
- vba - 变体和 if 语句 - VBA
- java - 提交从数据库中提供数据的搜索表单后如何解析 Html
- flutter - Dart 中的日期格式,包括 GMT
- javascript - 如何使用 d3.js 在画布中移动元素时减少延迟
- java - 如何以最优雅的方式找到具有最大价值的对象?
- loopback4 - Loopback 4 授权提供程序不起作用
- html - 以角度 8 上传 zip 文件
- reactjs - React 中的类和继承
- laravel - 我需要使用具有不同模型的 Laravel 收银员,而不是使用默认的用户模型