【发布时间】:2018-01-22 09:51:24
【问题描述】:
我在 Angular 2 中使用 Jasmin 和 Karma 进行单元测试。
我需要在下面模拟这个代码
this.activatedRoute.url.subscribe(url => {
debugger;
this.isEdit = false;
if (url[0].path === 'updatecoc') {
this.isEdit = true;
}
});
我试过用这种方式模拟: How to mock an activatedRoute parent Route in angular2 for testing purposes?
let fakeActivatedRoute = new MockActivatedRoute();
fakeActivatedRoute.parent = new MockActivatedRoute();
let urlSegment: UrlSegment[] = [];
urlSegment.push({ path: "updatecoc", parameters: {} });
fakeActivatedRoute.url = Observable.of(urlSegment);
beforeEach(() => {
TestBed.configureTestingModule({
imports: [FormsModule, MessagesModule, DataTableModule, DropdownModule, ConfirmDialogModule, AccordionModule,
AutoCompleteModule, DialogModule, EditorModule, HttpModule],
declarations: [MaintainCOCComponent],
providers: [{ provide: MaintainCOCService, useClass: MaintainCOCService },
{ provide: Configuration, useClass: Configuration },
{ provide: Router, useClass: MockRouter },
{ provide: ActivatedRoute, useClass: fakeActivatedRoute }];
但在模拟 ActivatedRoute 模块时出现错误。我已经尝试了 2 天的一切。我无法解决这个问题。
完整的错误信息是:
Object doesn't support this action
at _ActivatedRoute_58.get (Function code:173:46)
at DynamicTestModuleInjector.prototype.getInternal (Function code:281:43)
at NgModuleInjector.prototype.get (http://localhost:9876/base/src/test.ts:60528:9)
at TestBed.prototype.get (http://localhost:9876/base/src/test.ts:17440:13)
at AppView.prototype.injectorGet (http://localhost:9876/base/src/test.ts:89000:17)
at DebugAppView.prototype.injectorGet (http://localhost:9876/base/src/test.ts:89428:13)
at View_MaintainCOCComponent_Host0.prototype.createInternal (Function code:20:3)
at AppView.prototype.createHostView (http://localhost:9876/base/src/test.ts:88956:9)
at DebugAppView.prototype.createHostView (http://localhost:9876/base/src/test.ts:89412:13)
at ComponentFactory.prototype.create (http://localhost:9876/base/src/test.ts:44498:9)
注意:我应该为已解决的答案提供赏金。
【问题讨论】:
-
fakeActivatedRoute不是一个函数,所以你在做什么没有意义。您可以使用useValue或useFactory来注入现有对象。 -
@AluanHaddad 您能否提供答案? fakeActivatedRoute 是一个类的实例。
标签: angular unit-testing typescript jasmine karma-jasmine