$ httpBackend似乎没有刷新请求

时间:2016-07-18 21:11:25

标签: javascript angularjs unit-testing httpbackend ngdescribe

我正在使用ngDescribe测试我的Angular应用。我不认为 ngDescribe在这里应该是一个太大的问题,因为它只是为我管理依赖注入。我首先开始尝试按照ngDescribe文档说的方式进行测试,在下面的代码中我将其更改为更直接的方法,看看我是否可以进行任何更改。我正在调用一个方法,反过来调用$http.post('urlname', data);调试时我可以清楚地看到我的方法一直到它调用post()的地方但是它永远不会继续。因此,我的测试总是超时。

希望我有一些简单的错误!这是我的代码。失败的测试是“应该工作”,所有其他测试都按预期通过。

请注意,在测试之前,babel正在处理这项测试和服务。

这是服务,使用时效果很好。它还有一些我已经删除的其他变量,但我保证这些变量正常工作。在调试测试时,我可以看到await被击中,但它永远不会继续,或者返回。在应用程序中使用时,它会完全按预期返回。我 THINK 这与ngmock无法正常返回有关。

async function apiCall (endPoint, data) {
    if (!endPoint) {
        return false;
    }

    try {
        return data ? await $http.post(`${endPoint}`, data) : await $http.get(`${endPoint}`);
    } catch (error) {
        return false;
    }
}

以下是测试:

ngDescribe({
    name: 'Api Service, apiCall',
    modules: 'api',
    inject: ['apiService', '$httpBackend'],
    tests (deps) {
      let svc;
      beforeEach(() => {
        svc = deps.apiService;
      });
      it('is a function', () => {
        expect(angular.isFunction(svc.apiCall)).toBe(true);
      });
      it('returns a promise', () => {
        const apiCall = svc.apiCall();
        expect(angular.isFunction(apiCall.then)).toBe(true);
      });
      it('requires an endpoint', async () => {
        const apiCall = await svc.apiCall();
        expect(apiCall).toBe(false);
      });
      it('should work', (done) => {
        deps.http.expectPOST('fakeForShouldWork').respond({ success: true });
        const apiCall = svc.apiCall('fakeForShouldWork', {});
        apiCall.then(() => done()).catch(() => done());
        deps.http.flush();
      });
    },
  });

被调用的方法apiCall只是一个由$http.post().then();解析的promise。如果抛出错误,它也会解析为false。

由于deps.http.expectPOST没有失败,我可以告诉发送传出请求。我通过将其更改为expectGET来验证这一点,然后我收到一个关于它是POST的错误。

我已经尝试将flush()方法移动到测试方法的所有不同部分,但似乎没有任何区别。

有什么想法?非常感谢你的帮助!

0 个答案:

没有答案