Jasmine it('should create') fails with Component should create FAILED TypeError: Cannot read property 'next' of undefined
Jasmine it('should create') fails with Component should create FAILED TypeError: Cannot read property 'next' of undefined
我的组件从存储中获取数据
@Component({
selector: 'iomt-user',
templateUrl: './user.component.html',
styleUrls: ['./user.component.scss']
})
export class UserComponent implements OnInit {
users: Observable<User[]>;
constructor(readonly store: Store<AppState>) {
this.users = this.store.pipe(select(getUsers))
}
ngOnInit(): void {
this.store.dispatch(new LoadUsers());
}
}
测试看起来像这样
describe('UserComponent', () => {
let component: UserComponent;
let fixture: ComponentFixture<UserComponent>;
const initialState = { loggedIn: false };
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [UserComponent, UserTableComponent],
imports: [MaterialModule, FormsModule, RouterTestingModule, UserDomainModule,
HttpClientTestingModule, ReactiveFormsModule, BrowserAnimationsModule, StoreModule.forRoot(userReducer)],
providers: [
provideMockStore({initialState}),
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(UserComponent);
component = fixture.componentInstance;
component.users = component.store.pipe(select(getUsers));
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
测试输出给了我
Chrome 77.0.3865 (Windows 10.0.0) UserComponent should create FAILED
TypeError: Cannot read property 'next' of undefined
at <Jasmine>
at Function.continuer (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1278:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1305:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:359:1)
at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:308:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:358:1)
at Zone.run (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:124:1)
at runInTestZone (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:561:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:576:1)
at <Jasmine>
Chrome 77.0.3865 (Windows 10.0.0): Executed 20 of 31 (1 FAILED) (0 secs / 5.334 secs)
Chrome 77.0.3865 (Windows 10.0.0) UserComponent should create FAILED
TypeError: Cannot read property 'next' of undefined
at <Jasmine>
at Function.continuer (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1278:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1305:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:359:1)
at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:308:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:358:1)
at Zone.run (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:124:1)
at runInTestZone (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:561:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:576:ne1)
如果我删除 'expect(component).toBeTruthy();' 应该创建的部分无论如何都会失败。 'next'里面用的是什么过程?我怎样才能找到调用的是什么?
我不熟悉测试和存储,所以这对我来说意义不大。感谢您的帮助。
是async导入错误导致的。
我更改了 import { async } from "q";从“@angular/core/testing”导入{异步};
我的组件从存储中获取数据
@Component({
selector: 'iomt-user',
templateUrl: './user.component.html',
styleUrls: ['./user.component.scss']
})
export class UserComponent implements OnInit {
users: Observable<User[]>;
constructor(readonly store: Store<AppState>) {
this.users = this.store.pipe(select(getUsers))
}
ngOnInit(): void {
this.store.dispatch(new LoadUsers());
}
}
测试看起来像这样
describe('UserComponent', () => {
let component: UserComponent;
let fixture: ComponentFixture<UserComponent>;
const initialState = { loggedIn: false };
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [UserComponent, UserTableComponent],
imports: [MaterialModule, FormsModule, RouterTestingModule, UserDomainModule,
HttpClientTestingModule, ReactiveFormsModule, BrowserAnimationsModule, StoreModule.forRoot(userReducer)],
providers: [
provideMockStore({initialState}),
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(UserComponent);
component = fixture.componentInstance;
component.users = component.store.pipe(select(getUsers));
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
测试输出给了我
Chrome 77.0.3865 (Windows 10.0.0) UserComponent should create FAILED
TypeError: Cannot read property 'next' of undefined
at <Jasmine>
at Function.continuer (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1278:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1305:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:359:1)
at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:308:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:358:1)
at Zone.run (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:124:1)
at runInTestZone (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:561:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:576:1)
at <Jasmine>
Chrome 77.0.3865 (Windows 10.0.0): Executed 20 of 31 (1 FAILED) (0 secs / 5.334 secs)
Chrome 77.0.3865 (Windows 10.0.0) UserComponent should create FAILED
TypeError: Cannot read property 'next' of undefined
at <Jasmine>
at Function.continuer (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1278:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/q/q.js:1305:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:359:1)
at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:308:1)
at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:358:1)
at Zone.run (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:124:1)
at runInTestZone (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:561:1)
at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:576:ne1)
如果我删除 'expect(component).toBeTruthy();' 应该创建的部分无论如何都会失败。 'next'里面用的是什么过程?我怎样才能找到调用的是什么?
我不熟悉测试和存储,所以这对我来说意义不大。感谢您的帮助。
是async导入错误导致的。 我更改了 import { async } from "q";从“@angular/core/testing”导入{异步};