【问题标题】:Spying on a function returned by another function监视另一个函数返回的函数
【发布时间】:2013-08-01 19:51:00
【问题描述】:

我有一个模拟资源,它只是一个函数对象,在这种情况下只有一个。该函数返回另一个函数。代码如下所示:

var mockRevivhalResource = {
    tenantOptions: function tenantOptions() {
        return {
            post: function post() {
            }
        }
    }
};
var RevivhalResource = mockRevivhalResource;

我可以使用spyOn(RevivhalResource, 'tenantOptions'); 监视tenantOptions(),但我似乎无法监视tenantOptions() 返回的post()

唯一不会引发错误的是spyOn(RevivhalResource.tenantOptions(), 'post');,但我相信我只是在 post 函数的新实例上设置间谍,但是当 Angular 应用程序调用 RevivhalResource.tenantOptions().post(); 时,它正在调用的新实例发布,因为如果我在模拟的发布功能中有console.log("test");,即使我不让间谍调用,测试也会打印出“测试”。但在这件事上我可能是错的。

调用资源的控制器代码是这样的

$scope.fun = function fun() {
    RevivhalResource.tenantOptions().post(
        {...stuff...},
        function success(data) {...success handler...},
        function error(data) {...error handler...}
    )
};

RevivhalResource 是这样的 angularjs 提供者

angular.module('revivhal').provider('RevivhalResource', [function () {
    ...init stuff...
    this.$get = function ($resource) {
        ...more init stuff...
        return {
            tenantOptions: function tenantOptions() {
                return $resource(...path..., {...data...}, 
                                 post: {method: "POST"});
            }
        }
    }
}]);

而我正在尝试做的是使用间谍来确认 RevivhalResource.tenantOptions().post() 已被调用。然后我需要让间谍调用成功和错误处理程序来测试处理程序是否正确。

【问题讨论】:

    标签: angularjs jasmine


    【解决方案1】:

    您可以重构您的模拟,使其由返回其他间谍的间谍构建:

    var postSpy = jasmine.createSpy();
    var tenantOptionsSpy = jasmine.createSpy()
    var mockRevivhalResource = {
        tenantOptions: tenantOptionsSpy.andReturn({post: postSpy})
    };
    
    mockRevivhalResource.tenantOptions().post()
    expect(tenantOptionsSpy).toHaveBeenCalled();
    expect(postSpy).toHaveBeenCalled();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多