【发布时间】:2017-02-22 10:05:01
【问题描述】:
在我的 Angular 2.0.0 应用程序中,我试图在使用 AuthHttp 而不是 Http 的服务中模拟 HTTP 调用。
@Injectable()
export class FundingPlanService {
constructor(private http: AuthHttp);
getFundingPlans(): Observable<FundingPlan[]> {
return this.http.get('http://localhost:8080/api/fundingplans')
.map((response: Response) => {
return response.json();
}).map((json: any) => {
// some logic here
return fundingPlans;
});
}
}
在测试中,我乱七八糟地在网上找到了一些零零碎碎的东西,像这样:
describe('Service: FundingPlan', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
FundingPlanService,
MockBackend,
BaseRequestOptions,
{
provide: Http,
useFactory: (backend, options) => new Http(backend, options),
deps: [MockBackend, BaseRequestOptions]
},
{
provide: AuthHttp,
useFactory: (http) => new AuthHttp(new AuthConfig(), http),
deps: [Http]
}
]
});
});
it('should ...', inject([FundingPlanService, MockBackend], fakeAsync((service: FundingPlanService, backend: MockBackend) => {
backend.connections.subscribe((connection: MockConnection) => {
expect(false).toBe(true);
expect(connection.request.method).toBe(RequestMethod.Get);
expect(connection.request.url).toBe('http://localhost:8080/api/fundingplans');
});
let fundingPlans = service.getFundingPlans();
})));
});
Http 使用 MockBackend,AuthHttp 使用带有模拟后端的 Http:
LOG: '*** const ', AuthHttp{http: Http{_backend: MockBackend{connectionsArray: ...
但expect 语句永远不会执行。可以肯定的是,我添加了expect(false).toBe(true);,但测试以SUCCESS 结束。
我错过了什么?
【问题讨论】:
标签: unit-testing angular mocking