我在angluar2中测试一个函数,它返回一个Promise。以下是我的功能的简化版本:
class ChartData(APIView)
def post(self, request,format=None):
---
# Your post call to API
authHttp是来自angular2-jwt的服务,它在每次方法调用后返回一个Observable。
这就是我模仿我的服务的方式:
getItems(orderId: string): Promise<ItemsModel> {
return this.authHttp.get('https://my-api-url').toPromise<ItemsResponseModel>().then(ItemsResponseModel => {
let itemsModel = new ItemsModel();
// Mapping values from ItemsResponseModel to ItemsModel
return itemsModel;
});
}
现在,我想测试这个功能。所以,这就是我测试它的方式:
let callback: string;
beforeEach(() => {
itemsResponseModel = new ItemsResponseModel();
mockAuthHttp = jasmine.createSpyObj('mockAuthHttp', ['get']);
mockAuthHttp.get.and.callFake((url: string) => {
callbackUrl = url;
return Observable.of(itemsResponseModel);
});
myService = new MyService(mockAuthHttp);
});
这些简单的测试用例也失败了,直到我添加了“完成”功能然后它们通过了。
问题是当我想使用我的新it_multiple函数进行测试时,我无法传递“完成”功能。我编写了该函数,仅在一次测试中支持多个测试用例。我不知道如何扩展此功能以接受“完成”功能。我希望在以正确的方式传递“完成”功能之后,我不会遇到此函数编写的测试问题。
it('should call with correct url', (done: any) => {
myService.getItems('123').then(itemsModel => {
expect(callbackUrl).toBe('https://my-api-url');
done();
});
});
it('should have correct value1', (done: any) => {
myService.getItems('123').then(itemsModel => {
expect(itemsModel.value1).toBe('something');
done();
});
});
目前,这些测试用例也不会失败,但Jasmine也将下一个“it”描述为失败的测试。它说“其他一些测试”已经失败,加上其中两个案例在it_multiple中!我有什么想法可以为我的it_multiple设置一个“完成”的功能吗?在“完成”之前我和“它”有同样的问题。我认为这也是问题所在。如果您不这么认为,也请告诉我......