Sau khi tiếp tục chọc và thúc đẩy, tôi đã tìm thấy một số thông tin cực kỳ hữu ích tại http://blog.foundry376.com/2012/09/connecting-to-a-socket-io-server-from-node-js-unit-tests. Trong ví dụ của tác giả, ông chỉ ra bước quan trọng trong việc thiết lập trình lắng nghe socket trong các móc "trước *". Ví dụ này công trình (giả sử một máy chủ đang lắng nghe cho các kết nối ổ cắm ở localhost: 3001, tất nhiên)
var io = require('socket.io-client')
, assert = require('assert')
, expect = require('expect.js');
describe('Suite of unit tests', function() {
var socket;
beforeEach(function(done) {
// Setup
socket = io.connect('http://localhost:3001', {
'reconnection delay' : 0
, 'reopen delay' : 0
, 'force new connection' : true
});
socket.on('connect', function() {
console.log('worked...');
done();
});
socket.on('disconnect', function() {
console.log('disconnected...');
})
});
afterEach(function(done) {
// Cleanup
if(socket.connected) {
console.log('disconnecting...');
socket.disconnect();
} else {
// There will not be a connection unless you have done() in beforeEach, socket.on('connect'...)
console.log('no connection to break...');
}
done();
});
describe('First (hopefully useful) test', function() {
it('Doing some things with indexOf()', function(done) {
expect([1, 2, 3].indexOf(5)).to.be.equal(-1);
expect([1, 2, 3].indexOf(0)).to.be.equal(-1);
done();
});
it('Doing something else with indexOf()', function(done) {
expect([1, 2, 3].indexOf(5)).to.be.equal(-1);
expect([1, 2, 3].indexOf(0)).to.be.equal(-1);
done();
});
});
});
tôi thấy rằng vị trí của done() trong beforeEach, socket.on ('kết nối' ...) người nghe rất quan trọng để có kết nối được thiết lập. Ví dụ: nếu bạn nhận xét xong() trong trình nghe, sau đó thêm một phạm vi ra (ngay trước khi thoát khỏi beforeEach), bạn sẽ thấy thông báo "không có kết nối để ngắt ..." thay vì "ngắt kết nối .. ." thông điệp. Giống như vậy:
beforeEach(function(done) {
// Setup
socket = io.connect('http://localhost:3001', {
'reconnection delay' : 0
, 'reopen delay' : 0
, 'force new connection' : true
});
socket.on('connect', function() {
console.log('worked...');
//done();
});
socket.on('disconnect', function() {
console.log('disconnected...');
});
done();
});
Tôi mới làm quen với Mocha, vì vậy có thể là một lý do rất rõ ràng để bắt đầu thực hiện() với chính phạm vi ổ cắm. Hy vọng rằng chi tiết nhỏ sẽ tiết kiệm cho những người khác trong giày của tôi từ kéo tóc.
Đối với tôi, những thử nghiệm trên (với Phạm vi đúng đắn về done()) kết quả đầu ra:
Suite of unit tests
First (hopefully useful) test
◦ Doing some things with indexOf(): worked...
✓ Doing some things with indexOf()
disconnecting...
disconnected...
◦ Doing something else with indexOf(): worked...
✓ Doing something else with indexOf()
disconnecting...
disconnected...
2 tests complete (93 ms)
Đây có phải là thử nghiệm mocha hoặc hoa nhài không? Đối với các kiểm tra mocha không đồng bộ (đây là) hàm test của bạn cần có hàm gọi lại (testDone) 'để mocha biết cách xử lý nó một cách thích hợp. Điều này thực sự có thể được làm việc nhưng mocha là thoát trước khi sự kiện 'kết nối' cháy vì mocha không biết nó nên chờ đợi. –