Обратный вызов не вызывается по запросу в тестах chai

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

var expect = require('chai').expect                                              
var request = require('request'); 

describe('Test http', function(){                                                                             

it('get', function(){                                                        
  request('http://www.google.com', function (error, response, body) {                                       
    throw new Error("test get")                                                                             
  })                                                                                                        
})                                                                                                          

}) 

person Fabian Barkhau    schedule 08.01.2015    source источник
comment
Правильный ответ можно найти здесь. stackoverflow.com/questions/11235815/   -  person Fabian Barkhau    schedule 08.01.2015


Ответы (1)


Вы забыли добавить в тест done-Callback:

var expect = require('chai').expect                                              
var request = require('request'); 

describe('Test http', function(){                                                                             

    it('get', function(done){                                                        
      request('http://www.google.com', function (error, response, body) {                                       
        throw new Error("test get")
        done();                                                                             
      })                                                                                                        
    })                                                                                                          
}) 

РЕДАКТИРОВАТЬ: если нет обратного вызова, node/mocha будет считать, что тест завершен и остановится, прежде чем он проанализирует результат.

Кроме того, вместо прямого использования запроса я могу порекомендовать использовать супертест: https://www.npmjs.com/package/supertest

person BenSower    schedule 22.06.2015
comment
Это не будет работать, так как запрос является асинхронным, и функция может возвращаться быстрее, чем запускается обратный вызов, что завершает тест. - person Andrey; 05.05.2017
comment
Привет, Андрей, запрос асинхронный, это правильно, но так как я предоставляю готовую функцию тесту мокко и вызываю ее только в обратном вызове запроса, а также не возвращаю сам объект запроса (например, супертест возвращает стандарт-соответствует обещания), тест работает, как и ожидалось. - person BenSower; 07.05.2017
comment
вы правы, я не знал об этом асинхронном поведении тестов мокко, когда это делается - person Andrey; 07.05.2017