Angular + Redux Jasmine 测试 "Cannot read property 'dispatch' of undefined" 在运行中随机抛出
Angular + Redux Jasmine testing "Cannot read property 'dispatch' of undefined" randomly thrown in runs
我有一个集成测试依赖于我使用存根提供给测试平台的 2 个服务。
当我在这个类别的订阅块中测试函数 updateCategory()
时,我有一个函数 ngRedux.dispatch({type: something})
错误:TypeError: Cannot read property 'dispatch' of undefined
随机抛出,即使服务已存根并提供了功能。出于某种奇怪的原因,它认为这是服务的 属性。
抛出这个错误,没有对测试进行任何更改,只是刷新业力页面:
- 每次随机测试
- 有时所有测试都通过,但仅在控制台出现错误。
- 有时它会在抛出错误后停止尝试其他测试。
- 有时它会在所有测试都通过时抛出错误。
它是如此不可预测,对我来说根本没有意义。
测试台配置:
describe('AdminCategoriesComponent', () => {
let component: AdminCategoriesComponent;
let fixture: ComponentFixture<AdminCategoriesComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
MatSnackBarModule,
ReactiveFormsModule,
FormsModule,
MatInputModule,
MatExpansionModule,
BrowserAnimationsModule,
NgReduxTestingModule
],
declarations: [AdminCategoriesComponent],
providers: [
{ provide: AdminService, useClass: AdminStub },
{ provide: NgRedux, useclass: MockNgRedux }
],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents()
.then(() => {
MockNgRedux.reset();
fixture = TestBed.createComponent(AdminCategoriesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
}));
测试配置:
it('should update category', () => {
component.categoryID = 1;
component.categoryTitle = 'Test Category Title';
component.categoryDescription = 'Test Category Description';
component.ngOnInit();
fixture.detectChanges();
component.categoryForm.value.categoryTitle = 'New Category Title';
component.categoryForm.value.categoryDescription =
'New Category Description';
component.updateCategory();
fixture.detectChanges();
expect(component.localLoading).toBeFalsy();
});
没有上面的测试 -- 不会抛出错误。如果没有该订阅块中的调度函数,也不会抛出错误。
angular-redux 模块已过时并且通常是垃圾,当您尝试使用它 运行 进行任何测试时,这会变得更加明显。在切换到 @ngrx/store 并正确学习如何使用 observables 一年后,解决方案是使用 @ngrx/store 或 fork angular-redux 并自己修复错误。
我有一个集成测试依赖于我使用存根提供给测试平台的 2 个服务。
当我在这个类别的订阅块中测试函数 updateCategory()
时,我有一个函数 ngRedux.dispatch({type: something})
错误:TypeError: Cannot read property 'dispatch' of undefined
随机抛出,即使服务已存根并提供了功能。出于某种奇怪的原因,它认为这是服务的 属性。
抛出这个错误,没有对测试进行任何更改,只是刷新业力页面:
- 每次随机测试
- 有时所有测试都通过,但仅在控制台出现错误。
- 有时它会在抛出错误后停止尝试其他测试。
- 有时它会在所有测试都通过时抛出错误。
它是如此不可预测,对我来说根本没有意义。
测试台配置:
describe('AdminCategoriesComponent', () => {
let component: AdminCategoriesComponent;
let fixture: ComponentFixture<AdminCategoriesComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
MatSnackBarModule,
ReactiveFormsModule,
FormsModule,
MatInputModule,
MatExpansionModule,
BrowserAnimationsModule,
NgReduxTestingModule
],
declarations: [AdminCategoriesComponent],
providers: [
{ provide: AdminService, useClass: AdminStub },
{ provide: NgRedux, useclass: MockNgRedux }
],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents()
.then(() => {
MockNgRedux.reset();
fixture = TestBed.createComponent(AdminCategoriesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
}));
测试配置:
it('should update category', () => {
component.categoryID = 1;
component.categoryTitle = 'Test Category Title';
component.categoryDescription = 'Test Category Description';
component.ngOnInit();
fixture.detectChanges();
component.categoryForm.value.categoryTitle = 'New Category Title';
component.categoryForm.value.categoryDescription =
'New Category Description';
component.updateCategory();
fixture.detectChanges();
expect(component.localLoading).toBeFalsy();
});
没有上面的测试 -- 不会抛出错误。如果没有该订阅块中的调度函数,也不会抛出错误。
angular-redux 模块已过时并且通常是垃圾,当您尝试使用它 运行 进行任何测试时,这会变得更加明显。在切换到 @ngrx/store 并正确学习如何使用 observables 一年后,解决方案是使用 @ngrx/store 或 fork angular-redux 并自己修复错误。