[英]Angular 2 unit test case is not working for services with external module configuration
[英]Angular 4/5 unit test case .toBe in Services
我正在尝试编写测试案例以调用Service并从HTTP获得响应。 参考
现在问题如下:
expect(data.length).toBe(12);
即使data.length
为100,此代码也不会引发任何异常
it('Should call HTTP!', inject([SampleDataService], (sampleDataService) => {
expect(100).toBe(12); //<== This gives me correct exception i.e Expected 100 to be 12.
sampleDataService.getData().subscribe(
(data) => {
console.log('ngOnInit', data.length); // here data.length is 100
expect(data.length).toBe(12); // This does not throw any exception
});
}));
SampleDataService.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class SampleDataService {
constructor(private http:HttpClient) { }
getData(){
return this.http.get("http://jsonplaceholder.typicode.com/posts");
}
}
app.component.spec.ts
import { TestBed, async, ComponentFixture,inject } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { SampleDataService } from './services/sample-data.service';
import { HttpClientModule,HttpClient } from '@angular/common/http';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule
],
declarations: [
AppComponent
],
providers:[SampleDataService]
}).compileComponents();
}));
it('Should call HTTP!', inject([SampleDataService], (sampleDataService) => {
expect(100).toBe(12);
sampleDataService.getData().subscribe(
(data) => {
console.log('ngOnInit', data.length);
expect(data.length).toBe(12);
});
}));
});
您通常希望在单元测试期间模拟Http调用。 但是,如果您确实不想这么做,则由于http是异步的,因此仅在收到响应后才需要结束测试:
it('Should call HTTP!', (done) => {
const service = TestBed.get(SampleDataService);
service.getData().subscribe(
(data) => {
console.log('ngOnInit', data.length);
expect(data.length).toBe(12);
done();
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.