У меня есть сервисный модуль, который экспортируется как функция. Мне нужно передать пару вещей, как объект конфигурации, поэтому нужно сохранить эту структуру. Я пытаюсь отключить функцию из службы, но не могу понять это. В моем приложении у меня есть функция, которая вызывает вызов API, который является проблематичным во время тестирования, поэтому я хотел бы его заглушить. (Я понимаю, что я должен был бы написать мой тест по-разному обрабатывать вопрос асинхронной)Как я могу высмеять функцию/свойство модуля узла, экспортированного как функцию, используя синус?
// myService.js
module.exports = function(config) {
function foo() {
returns 'bar';
}
return {
foo: foo
};
};
// test.js
var config = require('../../config');
var request = require('supertest');
var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');
var myService = require('./myService.js')(config);
describe('Simple test', function(done) {
it('should expect "something else", function(done) {
var stub = sinon.stub(myService, 'foo').returns('something else');
request(server) // this object is passed into my test. I'm using Express
.get('/testRoute')
.expect(200)
.expect(function(res) {
expect(res.body).to.equal('something else');
stub.restore();
})
.end(done);
});
});
* /testRoute I set up as a simple GET route that simply returns the value from myService.foo()
выше не работает, и я считаю, что он должен делать с тем, как моя служба экспортирует. Если я напишу службу, как показано ниже, заглушка работает нормально.
module.exports = {
test: function() {
return 'something';
}
};
Но опять же, я должен быть в состоянии передать информацию к модулю, так что я хотел бы, чтобы мои модули в первоначальной структуре выше. Есть ли способ заглушить функцию из модуля, который экспортируется таким образом? Я также изучал proxyquire, но не уверен, что это ответ.
Спасибо, это имеет смысл. Я пытаюсь погрузиться в TDD и строить лучшие привычки, и это, безусловно, поможет. Я стану подвергать функции статически, как вы предполагали. Благодарим вас за то, что вы подняли головку на очистку заглушки. Я делаю после того, как я бегу, чтобы очистить :) Думаю, я должен был включить его в мой вопрос! – ahnkee
подумайте о принятии моего ответа, если он сработает для вас – CaptEmulation
Просто сделал. Был в середине моего предыдущего комментария: p – ahnkee