AngularJS 测试:Jasmine 模拟回调

AngularJS testing : Jasmine mock callback

我有基本的 angular JS 知识,但我对 Jasmine 单元测试还很陌生。 我的问题如下:

我需要测试一个服务方法(来自 myService 的方法):

myService.method = function(args)
{
    var parameter = "myParam";
    anotherService.anotherMethod(parameter, function(result)
    {
        //Stuff to test using result
        if(result == "blabla")
            testFunction("param");

    });
};

如何将 anotherService.anotherMethod 模拟为 return 结果并测试 myService.method 的其余部分?例如,我需要检查是否已使用 "param"(使用 expect(myFunction)toHaveBeenCalledWith("param"))调用了 testFunction。

感谢您的帮助

你可以用 Jasmine Spies 做这些,但我建议使用 Sinon,因为它支持更多功能。

相关文档在此处:Sinon

如果您没有使用 Sinon 的自由,这里有一份 Jasmine Spy 备忘单: Jasmine Spy Cheatsheet。如本文所述,

var testPerson = new Person();
spyOn(testPerson, "getName");
testPerson.toString();
expect(testPerson.getName).toHaveBeenCalledWith("param");

我想做的是为我的 AJAX 调用创建一个假函数并使用其中一个参数:

spyOn(anotherService, 'anotherMethod').and.CallFake(function(){
  //Get args : fake result of AJAX call and callback
  var fakeResult = arguments[0];
  var callback = arguments[1];
  return callback(fakeResult);
});