单元测试使用不同参数对同一函数的多次调用angularjs/jasmine

单元测试使用不同参数对同一函数的多次调用angularjs/jasmine,angularjs,jasmine,jasmine2.0,Angularjs,Jasmine,Jasmine2.0,我正在尝试测试类似的代码 它所做的是当我得到409时,它改变参数并再次调用相同的函数 函数testSomething(stuff){ console.log(stuff); 返回customService.doSomething().then(function()){ 返回customService.doSomethingElse().then(函数(某物){ //在这里做点什么 返回$q.resolve(某物); }); },函数(错误){ 如果(error.status==409){ //

我正在尝试测试类似的代码

它所做的是当我得到409时,它改变参数并再次调用相同的函数

函数testSomething(stuff){
console.log(stuff);
返回customService.doSomething().then(function()){
返回customService.doSomethingElse().then(函数(某物){
//在这里做点什么
返回$q.resolve(某物);
});
},函数(错误){
如果(error.status==409){
//换货
//类似于stuff的东西=新闻凝灰岩;
测试某物(东西);
}
});

}
我猜你们的间谍只是互相覆盖。您可以这样做:

spyOn(customService, 'doSomething').and.returnValue($q.reject({
    status: 409
  }));
  someService.testSomething(stuff);
  // now doSomething is called and $q.reject is retuend
  expect(someService.testSomething.calls.argsFor[0]).toEqual([stuff]);      

  spyOn(customService, 'doSomething').and.returnValue($q.when());
  $scope.$apply();
或者像这样,我更喜欢:

var index = 0;

spyOn(customService, 'doSomething').and.callFake(() => {
  index++;
  return index === 1 ? $q.reject({status: 409}) : $q.when();
});

您好@PetrAveryanov,第一种方法不起作用,因为您尚未在someService.testSomething上注册间谍,因此调用[0]的args无法读取未定义的属性。在第二种方法中,您正在监视customService.doSomething,在我看来,这不是这里的问题。当您期望完整的工作示例时,建议您准备plunk/fiddle进行修复,当您给出一些有问题的不完整的代码时,请准备好回答不完整的代码