【发布时间】:2017-09-06 19:03:06
【问题描述】:
文件:login.component.spec.ts
- Jasmine、Karma 和 Angular 4
代码:
// To set up
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { TestBed, ComponentFixture, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { MaterialModule } from '@angular/material';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
// To support the view
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { PageLoginComponent } from './login.component';
describe('PageLoginComponent', () => {
let component: PageLoginComponent;
let fixture: ComponentFixture<PageLoginComponent>;
// To Assign
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
PageLoginComponent,
],
imports: [
RouterTestingModule,
BrowserAnimationsModule,
MaterialModule,
FormsModule,
ReactiveFormsModule,
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PageLoginComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
// To Tear down
it('should be created', () => {
expect(component).toBeDefined();
});
it('should return true', () => {
component.login();
console.log(component.form.errors);
expect(component.form.errors.invalidLogin).toBe(true);
});
});
要运行此测试,我需要执行所有这些导入操作。
在认证文件夹下,我有,登录组件,锁屏,确认,忘记密码。
我需要为每个组件编写测试。他们使用几乎相同的导入(至少 // set up 部分)。
有没有一种方法可以将类似的导入放入共享模块中,然后将该模块导入新的测试中?
(不是一个好的OO设计实践,我知道,我只是好奇这是否可能)
提前致谢。
------------- login.component.ts - 以备不时之需
import { UsernameValidators } from './username.validator';
import { Component } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormControl, FormGroup, Validators, FormBuilder } from '@angular/forms';
@Component({
selector: 'my-page-login',
styles: [],
templateUrl: './login.component.html'
})
export class PageLoginComponent {
form = new FormGroup({
username: new FormControl('', [
Validators.required
]),
password: new FormControl('', Validators.required)
});
// Defining property - For the ease of access
get username() {
return this.form.get('username');
}
get password() {
return this.form.get('password');
}
login() {
this.form.setErrors({
invalidLogin: true
});
}
}
【问题讨论】:
标签: angular typescript jasmine refactoring karma-jasmine