我在Angular2应用程序中进行单元测试,对angular2测试框架也是新手。
我有2个组件,并从服务中调用相同的方法。
首先,我需要导入服务和模型来创建模拟
import { MyService } from '../../shared/my.service';
import { MyModel } from '../../shared/my.model';
其次,将模型和服务安排到模拟
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
const mockMyModel: MyModel[] = [];
const mockMyService = {
sameMethod: () => Observable.of(mockMyModel),
};
最后,模拟服务
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MyComponent],
})
.overrideComponent(MyComponent, {
set: {
providers: [
{ provide: MyService , useValue: mockMyService },
],
},
})
.compileComponents();
}));
我需要为我的另一个组件做同样的事情。
选项1:有没有办法全局共享模拟准备
例如{ provide: MyService , useValue: global.mockMyService }
选项2:是否可以将'ServiceTestingModule'(例如'RouterTestingModule')用于模拟服务。
谢谢!
答案 0 :(得分:0)
绝对可以使用选项1
myMockProvider = { provide: MyService , useValue: mockMyService };
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MyComponent],
})
.overrideComponent(MyComponent, {
set: {
providers: [myMockProvider],
},
})
.compileComponents();
}));
myMockProvider
也可以是提供者列表。嵌套列表由providers: [...]
自动解析/展平。