我的一个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调用,那么我必须指望两次次。
这是否意味着,如果特定代码存根中有n
相同的 api调用,我必须指望它们n
次?
是否有任何类似的结构,如
$ httpBackend.WheneverexpectGET(GET_CONFIG).respond(200 );
所以,每当我们调用API时,只需返回上面的200
状态?
感谢您对此的评论...
编辑:(在完成此操作之前阅读已接受的答案。)
感谢@kamituel的精彩回答。
总结其答案中提供的信息:
使用expect
:
使用when
:( $ httpBackend.when)
$httpBackend.when
的行为类似于迷你模拟数据库。每当您的代码需要API的响应时,请提供它。多数民众赞成。答案 0 :(得分:1)
是的,.expectGET
用于断言应用程序已发出给定请求。因此,如果您希望应用程序发出n
请求,则需要将其称为n
次。
如果您不需要断言,但只希望通过其发出的任何请求使应用程序逻辑工作,您可能希望使用.whenGET
。已经描述了.expectXXX
和.whenXXX
之间的差异in another answer。
修改:不确定您使用的是哪个Angular版本,但您会发现in the implementation of .expectGET
:
expectations.shift();
一旦发出请求并与预期匹配,就会调用此方法。这意味着同样的期望只能在一次声明。
在测试完成后调用.verifyNoOutstandingExpectation()
通常也是一个好主意,以确保您使用.expectXXX()
指定为epxected的每个请求确实都是由应用程序生成的。< / p>