Шпион Синон как обратный вызов не вызывается

У меня есть исходный файл, для которого я написал тестовые примеры для

var debug = require('debug')('kc-feed:source:fb');
var request = require('request');
var config = require('../../config').root;


exports.source = function fetchFeed (callback) {
  var params = {
      headers: {'content-type' : 'application/jsons'},
      url: config.host + "v1/social/fb/sync_feed", 
      method: 'GET'
  };

  request(params, function(err, body, response) {
    if(err) {
      callback(err);
    }
    else {
      var raw_data = JSON.parse(response);
      callback(null, raw_data);
    }
  });
};

Это мой тестовый мокко

var chai = require('chai'),
    expect = chai.expect,
    app = require('../app'),
    rewire = require('rewire'),
    fbfeed = rewire('../src/feed/source/fb_feed'),
    supertest = require('supertest'),
    sinon = require('sinon'),
    nock = require('nock');

describe('test cases for fb feed file', function() {
    var callback;
    beforeEach(function(){
        callback = sinon.spy();     
    });

    after(function(){
        nock.cleanAll();
    });

    it('callback should be called with the response', function(done) {
        nock('http://localhost:3000/')
            .get('/v1/social/fb/sync_feed') 
            .reply(200, {});
            callback = sinon.spy();
        fbfeed.source(callback);
        sinon.assert.calledOnce(callback);
        done();
    }); 

    it('callback should be called with the error', function(done) {
        nock('http://localhost:3000/')
            .get('/v1/social/fb/sync_feed') 
            .replyWithError(new Error('err'));
        fbfeed.source(callback);
        sinon.assert.calledOnce(callback);
        done();
    }); 

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

1 ответ

Решение

Похоже, что запросы все еще выполняются асинхронно (я не могу однозначно сказать, ожидается ли это при использовании nock), так что вы не можете использовать шпионов, как это.

Вместо этого предоставьте обычный обратный вызов:

fbfeed.source(function(err, raw_data) {
  ...make your assertions...
  done();
});
Другие вопросы по тегам