【发布时间】:2017-12-21 11:37:02
【问题描述】:
我在网上找到了很多关于如何测试发出 API 请求的服务的示例,但对于以下服务:
- 调用另一个服务,该服务发出一个 HTTP 请求并传递这个 回到原来的服务
- 根据该请求发出 http 请求
我正在努力让它发挥作用。这是我的代码示例:
beforeEach((done) => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule,
HttpClientTestingModule,
JwtModule.forRoot({
jwtOptionsProvider: {
provide: JWT_OPTIONS,
useFactory: jwtOptionsFactory,
deps: []
}
}),
],
providers: [
ConfigService,
AuthenticationService,
UserService,
JobService
]
});
let injector = getTestBed();
sut = injector.get(JobService);
httpMock = injector.get(HttpTestingController);
});
describe('Appointment Management', () =>{
it('should set an apointment', () => {
expect(sut).toBeDefined();
const dummyResponse = 'dsfsdf';
sut
.setAppointmentDate('temp', new Date(2017, 12, 31))
.subscribe(result => {
expect(result).toEqual(dummyResponse)
})
const req = httpMock.expectOne('http://localhost:32307/appointments');
expect(req.request.method).toBe('POST');
req.flush(dummyResponse);
});
})
为了更清楚地了解这里发生了什么,jobservice 正在测试中。它有configService和userService的依赖。
用户服务有configService和认证服务的依赖。
路由器和jwt服务是认证服务和用户服务的依赖。
所有服务也依赖于 httpclient。
我得到的实际回应:
错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。
它甚至不应该打一个真正的电话,所以我不确定它为什么会超时。我也尝试过删除依赖项所做的调用,这导致了同样的错误,例如
const userRequest = httpMock.expectOne('http://localhost:32307/user');
userRequest.flush('temp');
【问题讨论】:
-
@mplungjan 我不是投反对票的人,但问题不包含正在测试的代码并且缺少stackoverflow.com/help/mcve
-
我可以看到它更清晰的唯一方法是,如果我将整个内容包装在顶层描述中 - 我没有看到任何一点。但我从来没有能够得到一个问题这里没有被否决:D
-
告诉 OP 和我们其他人投票反对的原因会很有用。
-
@Craig 请提供所有相关代码。您正在测试的服务。他们不在那里。否则问题无法获得高质量的答案。
标签: javascript angular unit-testing typescript