2015-01-31 2 views
4

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

Я знаю, что есть issues с привязкой к шуму и узлу ядра, и я могу заставить работу работать dontMock зависимостей суперагента. Но я бы предпочел, чтобы шутка просто высмеивала superagent, не взорвавшись по умолчанию.

В результате очень подробный ввод или ввод unMockedModulePatterns в моем пакете.json, есть ли лучший способ?

// my-module.js 
'use strict'; 

var request = require('superagent'); 

module.exports = function() { 
    return request.get('http://stackoverflow.com/questions/tagged/jestjs'); 
}; 

Пример теста:

// __tests__/my-module-test.js 
'use strict'; 

jest.dontMock('../'); 
// T_T 
jest.dontMock('superagent'); 
jest.dontMock('debug'); 
jest.dontMock('tty'); 
jest.dontMock('util'); 
jest.dontMock('stream'); 
jest.dontMock('fs'); 
jest.dontMock('delayed-stream'); 
jest.dontMock('mime'); 
jest.dontMock('path'); 

describe('mymodule', function() { 
    var myModule, request; 

    beforeEach(function() { 
    myModule = require('../'); 
    request = require('superagent'); 

    request.get = jest.genMockFunction(function() { 
     return { 
     get: jest.genMockFunction() 
     } 
    }) 
    }); 

    it('makes an xhr request using superagent', function() { 
    var req = myModule(); 
    expect(request.get).toBeCalledWith('http://stackoverflow.com/questions/tagged/jestjs'); 
    }); 
}); 

ответ

6

Я считаю, что может быть лучше, чтобы написать manual mocks, например, так:

__tests __/codeundertest.js:

jest.dontMock('../codeundertest'); 
describe('whatever', function() { 
    it('should do the do', function() { 
    var request = require('superagent'); 

    require('../codeundertest')(); 
    expect(request.get.mock.calls[0][0]).toBe('http://stackoverflow.com/questions/tagged/jestjs'); 
    }); 
}); 

__mocks __/superagent.js:

module.exports = { 
    get: jest.genMockFunction() 
}; 

codeundertest.js: автоматический насмешливый

var request = require('superagent'); 
module.exports = function() { 
    return request.get('http://stackoverflow.com/questions/tagged/jestjs'); 
}; 

Jest является очень приятно, когда он работает, но есть много случаев, когда это будет легче писать свои собственные издевается, чем пытаться поддержать его automocking.

 Смежные вопросы

  • Нет связанных вопросов^_^