moll / node-mitm

Intercept and mock outgoing Node.js network TCP connections and HTTP requests for testing. Intercepts and gives you a Net.Socket, Http.IncomingMessage and Http.ServerResponse to test and respond with. Super useful when testing code that hits remote servers.
Other
637 stars 48 forks source link

feat: add ability to reject connection with ECONNREFUSED #73

Open viglucci opened 2 years ago

viglucci commented 2 years ago

Addresses #72

For context -- I am looking to use this functionality in the tests for rsocket-js.

Usage example:

it("rejects if the connection errors", async () => {
  // arrange
  mitm.on("connect", function (socket) {
    socket.reject();
  });

  const expectedError = new Error();
  expectedError.address = "127.0.0.1";
  expectedError.code = "ECONNREFUSED";
  expectedError.errno = -4078;
  expectedError.port = 9090;
  expectedError.syscall = "connect";

  // act
  const transport = new TcpClientTransport({
    connectionOptions: {
      host: "localhost",
      port: 9090,
    },
  });

  // assert
  await expect(transport.connect()).rejects.toEqual(expectedError);
});
vkruoso commented 2 years ago

This would be really great to test edge cases. This happens in real life and it is hard to test it.