使用$ httpBackend.flush(),setTimeout的行为与promise不同

时间:2017-12-05 04:06:14

标签: javascript jasmine karma-runner

我有一个奇怪的情况,其中setTimeout的行为与promise不同,我不知道为什么。我有这个测试有效:

    it('should get comments with promptid', function () {

      var url = encodeURI('/api/v1/comments?filter={"promptId":"59dd4e7c714d3e34de04030a"}&populate=[]');

      httpBackend.expectGET(url).respond(comments);

      setTimeout(function () {
        httpBackend.flush();
      }, 100);

      return myService.getCommentsByPromptId("59dd4e7c714d3e34de04030a").then(function (response) {

        expect(response.length).to.equal(1);
        expect(response[0]._id).to.equal(comments[0]._id);
      });

    });

然而,如果我尝试这样做:

    it('should get comments with promptid', function () {


      var url = encodeURI('/api/v1/comments?filter={"promptId":"59dd4e7c714d3e34de04030a"}&populate=[]');

      httpBackend.expectGET(url).respond(comments);

      const prom = myService.getCommentsByPromptId("59dd4e7c714d3e34de04030a");

      httpBackend.flush();

      return prom.then(function (response) {
        expect(response.length).to.equal(1);
        expect(response[0]._id).to.equal(comments[0]._id);
      });

    });

在第二种情况下,我在2000ms后得到超时。有什么理由吗?我无法弄清楚。

0 个答案:

没有答案