Обработка Ошибок Узла Sinon Mocha

сервер.js

var server = http.createServer(function(req, res) {

    lib.doSomething(x, y, function(err, data) {
        if (err) throw(err);

        res.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        res.end(data);
    });
});

serverTest.js

var request = require('request');
var server = require('server');

    it('throws error when doSomething returns err', function(done){

      var expected = 'testError';

      doSomething = sinon.stub(lib, 'doSomething', function(x, y, callback){
        callback(new Error(expected));
      });

      try{
        request(url, function(err, response, body){
          done();
        });
      } catch(e){
        expect(e).to.equal(expected);
      };

    });

Я подошел к этому модульному тесту многими способами, но всякий раз, когда я запускаю тесты, я продолжаю получать Uncaught Error: testErrorи тест терпит неудачу. Я посмотрел в интернете и не нашел удачи. Какой подход лучше всего использовать для прохождения модульного теста с ожидаемыми ошибками?

1 ответ

  1. То, что у вас есть здесь, это процесс, который разговаривает сам с собой через сокет. server.jsустанавливает службу, которая прослушивает запросы на сокете и отвечает, а затем тестовый код подключается к этому сокету и делает запросы. Дело в том, что стек вызовов на стороне сервера и стек вызовов на стороне клиента-это совершенно разные стеки. Если сервер создает исключение, клиент не может его перехватить. Другими словами, ваш requestвызов не вызовет исключениеlib.doSomething, потому что обратный вызов делает. Вы могли бы тривиально проверить, что обратный вызов вызвал исключение, но тогда это не тестирует много.