【发布时间】:2015-09-15 09:38:54
【问题描述】:
我正在尝试为连接到 socket.io 服务器的角度前端创建量角器测试。在我的测试中,我打开了一个新的 socket.io 服务器并在测试结束时将其关闭,但我发现旧测试的回调仍在运行,而不是新的。 我做错了什么?
我的简化量角器代码:
var Server = require('socket.io');
describe('test', function () {
var io;
beforeEach(function () {
io = Server(3800);
var test = jasmine.getEnv().currentSpec.description;
io.on('connection', function () {
var current = jasmine.getEnv().currentSpec.description;
if (test !== current) {
// This line shouldn't run
console.error('Connection been made to server of test ' + test +
' while current test is test ' + current);
}
});
});
it('one', function () {
browser.get('http://localhost:8080');
var label = element(By.binding('status'));
expect(label.getText()).toBe('connected');
});
it('two', function () {
browser.get('http://localhost:8080');
var label = element(By.binding('status'));
expect(label.getText()).toBe('connected');
});
afterEach(function () {
io.close();
})
});
还有我简化的 angular-app:
<html>
<head>
<script src="angular.js"></script>
<script src="socket.io.js"></script>
<script>
angular.module('test', [])
.controller('MainCtrl', function ($scope) {
var socket = io('localhost:3800');
socket.on('connect', function () {
$scope.status = 'connected';
$scope.$digest();
})
})
</script>
</head>
<body ng-app="test">
<div ng-controller="MainCtrl">
{{ status }}
</div>
</body>
</html>
【问题讨论】:
-
io.close()可能是异步的,所以afterEach在io实际关闭之前完成(然后下一个可能无法启动,因为端口已经在使用中,等等,等等)。也许您可以教 Protractor 等待服务器完全完成(或者教beforeEach在遇到套接字使用错误时重试。)(尽管您应该首先验证io.close()确实是问题所在。)
标签: angularjs node.js socket.io protractor