在angularjs中对http api进行了n次调用。我应该期待它们的次数吗?

时间:2017-04-19 07:25:36

标签: javascript angularjs unit-testing jasmine karma-jasmine

我的一个angularjs文件有一个类似于下面的代码结构:

this.examplecall = function() {
         var a = apiconfig.getconfig();
         ....
         //some lines of code
         ....
         var b = apiconfig.getconfig();
}

我开始通过角度规范来编写单元测试 - Jasmine,最后得到了下面的代码存根。

    describe("test examplecall")...

    it("should test cofig call in examplecall", function() {

     $httpBackend.expectGET(GET_CONFIG).respond(200);

    });

以上代码抛出异常告诉"意外GET .."

当我添加额外的expectGET时,事情很顺利。见下文:

describe("test examplecall")...

    it("should test cofig call in examplecall", function() {

     $httpBackend.expectGET(GET_CONFIG).respond(200);
     $httpBackend.expectGET(GET_CONFIG).respond(200);

    });

由此我推断,如果某个特定函数中有两个 api调用,那么我必须指望两次次。

  1. 这是否意味着,如果特定代码存根中有n 相同的 api调用,我必须指望它们n次?

  2. 是否有任何类似的结构,如

    $ httpBackend.WheneverexpectGET(GET_CONFIG).respond(200 );

  3. 所以,每当我们调用API时,只需返回上面的200状态?

    感谢您对此的评论...

    编辑:(在完成此操作之前阅读已接受的答案。)

    感谢@kamituel的精彩回答。

    总结其答案中提供的信息:

    1. 使用expect

      1. 预计API调用的顺序。它希望代码可以按照您期望的确切顺序调用api。
      2. 如果有3个api电话,那么你应该期待它们3次。
    2. 使用when :( $ httpBackend.when)

      1. 不期望是否进行API调用。只是不会抛出任何错误。
      2. $httpBackend.when的行为类似于迷你模拟数据库。每当您的代码需要API的响应时,请提供它。多数民众赞成。

1 个答案:

答案 0 :(得分:1)

是的,.expectGET用于断言应用程序已发出给定请求。因此,如果您希望应用程序发出n请求,则需要将其称为n次。

如果您不需要断言,但只希望通过其发出的任何请求使应用程序逻辑工作,您可能希望使用.whenGET。已经描述了.expectXXX.whenXXX之间的差异in another answer

修改:不确定您使用的是哪个Angular版本,但您会发现in the implementation of .expectGET

expectations.shift();

一旦发出请求并与预期匹配,就会调用此方法。这意味着同样的期望只能在一次声明。

在测试完成后调用.verifyNoOutstandingExpectation()通常也是一个好主意,以确保您使用.expectXXX()指定为epxected的每个请求确实都是由应用程序生成的。< / p>