【发布时间】:2016-11-29 04:31:52
【问题描述】:
这是关于 Angular 2 官方版本的。我知道单元测试在 beta、RC 和正式版本之间发生了巨大变化。
当 @ngrx/store 用作构造函数中的参数时,在单元测试中模拟 @ngrx/store 的好方法是什么?这不像模拟一个服务那么简单。
例如,如果我想模拟一个服务,那么我可以这样做:
let serviceStub = { }; // not a true mocked service, just a stub, right?
let de: DebugElement;
let el: HTMLElement;
let nativeEl: Element;
let comp: Typeahead;
let fixture: ComponentFixture<Typeahead>;
describe('Component:Typeahead', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [...],
declarations: [Typeahead],
providers: [
{provide: TypeaheadService, useValue: serviceStub} // provides the service that is being "mocked"
]
}).compileComponents();
fixture = TestBed.createComponent(Typeahead);
nativeEl = fixture.nativeElement;
comp = fixture.componentInstance;
de = fixture.debugElement;
});
});
这行得通。
但是,对于ngrx/store,它不会(如果您用 Store in 代替 TypeaheadService)。我认为您必须编写一个扩展 Store 的模拟类,然后将其提供给正在测试的组件,但我不确定为什么会这样(如果是这样的话)。
我只是对如何在我的单元测试中模拟 ngrx/store 感到困惑,并且在他们的网站或 github 上找不到任何文档。也许我忽略了它。
【问题讨论】:
-
你想测试你的减速器还是真正测试一个组件?
-
我已经测试了减速器。我想测试组件。这不是最佳做法吗?
-
我想会的。只是在我目前正在进行的一个项目中,我测试了我的减速器,并且还进行了 E2E 测试。问题是,到目前为止,我并不觉得有必要测试我的组件,因为它们不能处理那么多逻辑。甚至是“智能组件”。我发现使用
let,您可以创建“生成视图”或“计算视图”,它允许您将大量逻辑移出框架。它可能并不完美,也许以后我会觉得有必要测试组件:)。
标签: unit-testing angular jasmine ngrx