如何在node.js中创建一个简单的套接字?

Tha*_*you 19 sockets mocking mocha.js node.js

我正在尝试创建一个虚拟套接字,用于我的一些测试

var net = require("net");

var s = new net.Socket();

s.on("data", function(data) {
  console.log("data received:", data);
});

s.write("hello!");
Run Code Online (Sandbox Code Playgroud)

得到这个错误

错误:此套接字已关闭.

我也试过创建套接字

var s = new net.Socket({allowHalfOpen: true});
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?


作为参考,完整的测试看起来像这样

it("should say hello on connect", function(done) {

  var socket = new net.Socket();

  var client = Client.createClient({socket: socket});

  socket.on("data", function(data){
    assert.equal("hello", data);
    done();
  });

  client.connect();
  // writes "hello" to the socket
});
Run Code Online (Sandbox Code Playgroud)

Joh*_*ams 34

我不认为服务器处于监听状态.这就是我用的..

// server
require('net').createServer(function (socket) {
    console.log("connected");

    socket.on('data', function (data) {
        console.log(data.toString());
    });
})

.listen(8080);

// client
var s = require('net').Socket();
s.connect(8080);
s.write('Hello');
s.end();
Run Code Online (Sandbox Code Playgroud)

仅限客户..

var s = require('net').Socket();
s.connect(80, 'google.com');
s.write('GET http://www.google.com/ HTTP/1.1\n\n');

s.on('data', function(d){
    console.log(d.toString());
});

s.end();
Run Code Online (Sandbox Code Playgroud)

  • 我不明白.您只测试客户端套接字写入的能力?套接字必须连接到另一个套接字(例如服务器)才能在其上调用.write(). (4认同)

zs2*_*020 5

试试这个.

生产代码app.js:

var net = require("net");

function createSocket(socket){
    var s = socket || new net.Socket();
    s.write("hello!");
}

exports.createSocket = createSocket;
Run Code Online (Sandbox Code Playgroud)

测试代码: test.js:(Mocha)

var sinon = require('sinon'),
    assert = require('assert'),
    net = require('net'),
    prod_code=require('./app.js')

describe('Example Stubbing net.Socket', function () {
    it("should say hello on connect", function (done) {
        var socket = new net.Socket();
        var stub = sinon.stub(socket, 'write', function (data, encoding, cb) {
            console.log(data);
            assert.equal("hello!", data);
            done();
        });
        stub.on = socket.on;
        prod_code.createSocket(socket);
    });
});
Run Code Online (Sandbox Code Playgroud)