[英]No provider for $injector- In AngularJs + Angular 8 Hybrid application unit test case
[英]angular test fails at injector?
我有以下组成部分:
@Component({
selector: 'app-comment-table',
templateUrl: './comment-table.component.html',
styleUrls: ['./comment-table.component.css']
})
export class CommentTableComponent implements OnInit {
@Input() line: string;
comments: Array<IComments>;
constructor(private socketService: SocketService) {
this.comments = [];
}
//some functions
}
我正在尝试通过以下测试进行测试:
class mockSocket {
getComments() { return Observable.of() }
};
describe('Comment Table Component', () => {
let fixture, comp, el;
let mockSock = new mockSocket();
beforeEach(() => {
TestBed.configureTestingModule({
imports: [Ng2SmartTableModule],
declarations: [CommentTableComponent],
providers: [
{ provide: SocketService, useValue: mockSock }],
});
});
it('should call service',
inject([CommentTableComponent], (cmp: CommentTableComponent) => {
spyOn(mockSock, 'getComments');
cmp.ngOnInit();
expect(mockSock.getComments).toHaveBeenCalled();
}));
});
但是,此测试失败并显示错误消息:
注入错误(webpack:///~/@angular/core/@angular/core.es5.js:1231:21 <-client / src / test.ts:6040:86)在noProviderError上的[ProxyZone](webpack: ///~/@angular/core/@angular/core.es5.js:1269:0 <-client / src / test.ts:6078:12)[ProxyZone]
我认为该组件只需要向我提供的SocketService即可,但是该错误看起来好像缺少了提供程序? 我究竟做错了什么?
将.compileComponents()
添加到TestBed创建中,并将其包装在async()
函数中:
beforeEach( async( () => {
TestBed.configureTestingModule( {
imports: [ Ng2SmartTableModule ],
declarations: [ CommentTableComponent ],
providers: [
{ provide: SocketService, useValue: mockSock }
],
} ).compileComponents();
} ) );
如果这还不够,还可以将inject
包装在async()
中:
it('should call service',
async( inject( [ CommentTableComponent ], ( cmp: CommentTableComponent ) => {
spyOn( mockSock, 'getComments' );
cmp.ngOnInit();
expect( mockSock.getComments ).toHaveBeenCalled();
} ) ) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.