如何对一个依赖于其注册回调的Angular服务进行单元测试?

玻璃墙

我有一个AngularJs服务,该服务依赖于SignalR客户端进行基于推送的更新。

MyService向SignalR代理注册一个用于处理更新的函数,当SignalR服务器调用clientside方法时会调用该函数receiveUpdate,如下所示:

app.factory('MyService', function ($rootScope, signalRClient) {

signalRClient.proxy.on('receiveUpdate', function (update) {
    $rootScope.$apply(function () {
        handleUpdate(update);
    });
});

function handleUpdate(update) {
    // ....
}

return {
    getUpdates: function () {
        // ....
    }
}

});

我该如何嘲笑signalRClient我可以隔离其中的逻辑MyService如何伪造receiveUpdate要传递更新对象的调用?

伊瓦尼

我想这取决于您如何设置规格,我倾向于beforeEach为每种情况加载中的任何模块,并且会这样做。

var myMock;
var receiveUpdate;

beforeEach(module('whateverModuleSignalRClientIsIn', function($provide) {
    myMock = {
        proxy: {
            on: function(id, callback) {
                receiveUpdate = callback;
            }
        }
    };
    $provide.value('signalRClient', myMock);
}));

beforeEach(module('whateverModuleMyServiceIsIn'));

beforeEach(inject(function(MyService) {
    // MyService will not be instantiated untill it has been injected
    // and at this point signalRClient has been replaced with the mock already
}));

it('receives updates', function() {
    //This should trigger the callback in your service
    receiveUpdate({});
});

这样可以确保您的服务模块已加载的模拟版本myService

如何实现实际的模拟有点取决于服务的外观。您似乎正在注册一个回调,所以我只想让模拟对象onproxy属性具有一个方法,然后将其参数(您的回调)存储在规格中可用的引用中。然后,您应该可以在需要时简单地调用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单元测试Angular服务,该服务依赖于另一个使用InjectionToken的服务

如何测试依赖于另一个服务(又依赖于Http服务)的服务/组件?

如何对依赖于springBoot applicationContext的单元测试方法进行单元测试?

如何为依赖于其他服务或数据库的服务编写单元测试

当processElement依赖于广播的数据时,如何在flink中对BroadcastProcessFunction进行单元测试

如何对依赖于 redux props 的组件进行单元测试

如何对依赖于ActivatedRoute参数的组件进行单元测试?

如何对依赖于实例属性的实例方法进行单元测试?

如何对依赖于HttpContext.GetGlobalResourceObject的类进行单元测试?

如何对依赖于元素高度的组件进行单元测试(角度为5)?

如何对依赖于外部库“ <script src =“ http:// stripe [...]”的API进行单元测试

在 Prism.Unity 中注册一个依赖于另一个服务的服务实例

如何测试依赖于包含 BehaviorSubject 的服务的 Angular 组件?

如何在Flutter中对依赖于第三方包装的代码进行单元测试?

使用Jest对依赖于HTTP调用的代码进行单元测试的最佳方法?

对依赖于数据库的函数进行单元测试

[Angular 7+]:如何在另一个服务规范中对服务进行单元测试?

单元测试依赖于StreamReader读取文件的方法

如何运行依赖于Android库模块的单元测试?

超时内未调用异步回调-对Typescript和Angular $ http服务进行单元测试

如何编写一个依赖于其他服务并且只有组件注入父对象的Angular 2服务?

PHPUnit测试一个依赖于另一个方法的方法

测试一个对象是否依赖于另一个对象

如何进行改装回调的单元测试?

如何对回调逻辑进行单元测试?

如何对依赖于其他方法的测试方法进行单元化

NUnit:如何对另一个单元测试失败进行单元测试?

构造对象,其属性之一依赖于另一个。在C ++中

测试依赖于2个服务的组件