【问题标题】:Listen for events emitted by same Socket.IO socket侦听同一 Socket.IO 套接字发出的事件
【发布时间】:2015-01-07 01:51:04
【问题描述】:

我正在测试一个包装 Socket.IO 的 Angular 服务。为此,我需要监听我正在创建的同一个套接字发出的事件。

这里是服务:

angular.module('core').factory('SocketIOService', ['$rootScope',
    function($rootScope) {

        var socket = io();

        return {

            on: function(eventName, callback) {
                var args = arguments;
                socket.on(eventName, function() {
                    $rootScope.$apply(function() {
                        callback.apply(socket, args);
                    });
                });
            }

        };
    }
]);

还有一段测试文件(SocketIOService 是我正在创建的服务,socket 是来自io() 的全局单例返回值,$rootScope 是注入的$rootScope):

it('should apply changes using $rootScope.$apply', function() {
    var rootScopeSpy = sinon.spy($rootScope, '$apply');
    SocketIOService.on('anEvent', function() {});
    socket.emit('anEvent', {});
    expect(rootScopeSpy.calledOnce).toBe(true);
});

但是,socket 不会“听到”它正在侦听的事件,它自己也发出。有没有办法发出事件并监听(和“听到”)该事件?

【问题讨论】:

  • 您的确切问题不清楚。它不工作吗?

标签: angularjs testing socket.io


【解决方案1】:

在 html 中:您必须在标头中包含

在 Angular 中:

$scope.socket = new function () {
                    var self = this;
                    var socketIO;
                    var socketConfig = {};
                    self.connect = function () {
                        if (socketIO) {
                            socketIO.connect(socketConfig);
                            return;
                        }
                        socketIO = io(window.location.protocol + '//' + window.location.hostname + ":7777", socketConfig);
                        socketIO.on('connect', function () {
                            $scope.$apply();
                        });
                        socketIO.on('your_event', function (data) {
                           // dosomething
                            $scope.$apply();
                        });

                    };
                    self.get_data = function () {
                         socketIO.emit('get_data', your data);
                    };

                }
                $scope.socket.connect();

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2015-09-23
    • 2016-11-19
    • 2018-11-24
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多