Javascript 在另一个$http调用返回单元测试后,$http调用传入

Javascript 在另一个$http调用返回单元测试后,$http调用传入,javascript,angularjs,unit-testing,jasmine,Javascript,Angularjs,Unit Testing,Jasmine,我有一段代码如下 函数init(){ $http({ 方法:“GET”, url:baseUrl+'service/'+'/serviceA', 标题:{ “内容类型”:“应用程序/json”, } }).然后(函数成功响应(响应){ $scope.result=response.data; if($scope.result){ //initB是另一个$httpget方法 initB(); } //initC是另一个$httpget方法 initC(); //initD是另一个$httpget

我有一段代码如下

函数init(){
$http({
方法:“GET”,
url:baseUrl+'service/'+'/serviceA',
标题:{
“内容类型”:“应用程序/json”,
}
}).然后(函数成功响应(响应){
$scope.result=response.data;
if($scope.result){
//initB是另一个$httpget方法
initB();
}
//initC是另一个$httpget方法
initC();
//initD是另一个$httpget方法
initD();
});

}
在测试中,我看不出“it”函数之前的代码是什么样子的,但看起来您没有实例化$httpBackend(或者在实例化服务/控制器之后实例化它)。您的测试需要在您尝试测试的组件之前调用$httpBackend

您意识到您没有“等待”initB/initC或initD@JaromandaX是的,initB/C/D可以并行执行,它们没有任何关系,当init进程完成时,我将响应数据分配给B,C,成功事件处理程序中的D变量。@Allen4Tech为什么要测试$http方法?AngularJS社区已经对它进行了测试。您必须创建一个mock来测试该服务,而mock意味着没有真正的测试用例。如果函数包含任何逻辑,请为它准备一个测试用例。我确信我们可以编写好的、有意义的测试用例,而无需进行模拟。我还用mock为$http和其他一些服务编写了测试用例,但现在我确信在编写任何单元测试用例之前我都会进行推理。@Ajay我不想测试$http,所以我使用$httpBackend来模拟响应。在测试用例中,如果我调用该服务,返回一个数组,实际的代码逻辑将把响应分配给B,因此我需要测试B是否等于我调用的响应mocked@Allen4Tech我们可以从$http请求中单独测试该逻辑吗?如果我们可以,那么我们已经测试了代码,我认为没有必要模拟$httpBackend。您还可以包括整个测试代码吗?至少你声称的部分是在你的service/controller.Hmmm之前加载$httpBackend,看起来不错,奇怪的是它失败了。。。您是否也可以添加整个工具栏Ctrl控制器?也许问题就在那里。