使用Jasmine测试异步方法 - 错误的测试用例失败

时间:2017-06-13 07:01:22

标签: unit-testing typescript jasmine angular2-services

我在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设置一个“完成”的功能吗?在“完成”之前我和“它”有同样的问题。我认为这也是问题所在。如果您不这么认为,也请告诉我......

0 个答案:

没有答案