`cons foo = (val)=> {};
                  
                  
                    module.exports = {
                  
                  
                  foo,
                  
                  
                  }`
                  
                  
                  есть контроллер, который вызывает эту функцию
                  
                  
                  `
                  
                  
                  const {foo} = require('./helper');
                  
                  
                  router.post(()=> {
                  
                  
                    foo();
                  
                  
                  })`
                  
                  
                  
                  
                  
                  есть файл тестов (chai+mocha+sinon если интересно)
                  
                  
                  `
                  
                  
                  const helper = require('./helper');
                  
                  
                  describe.only('POST youtubedl/', done=> {
                  
                  
                      let fooStub;
                  
                  
                      beforeEach(()=> {
                  
                  
                          fooStub = sinon.stub(helper, 'foo');
                  
                  
                      });
                  
                  
                      afterEach(()=> {
                  
                  
                          fooStub.restore();
                  
                  
                      });
                  
                  
                      it('should work ok with url', ()=> {
                  
                  
                          fooStub.returns('someurl');
                  
                  
                          chai.request(app)
                  
                  
                              .post('/content/youtubedl')
                  
                  
                              .send({url: 'https://www.youtube.com/watch?v=5DEdR5lqnDE'})
                  
                  
                              .end((err, res) => {
                  
                  
                                  //do tests
                  
                  
                                  done();
                  
                  
                              });
                  
                  
                      });
                  
                  
                  })
                  
                  
                  `
                  
                  
                  
                  
                  
                  вопрос: почему орижинал функция не стабится? 
                  
                  
                  реквайры из двух разных мест в контроллере и в тестах - считаются разными реквайрами ?
                  
                  
                  а как это добро обойти? на классы переписать ?
                  
                  
                  
                  
                  
                  проблема по сути в том, что вызывается оригинальная функция, а не стаб.
                  
                  
                
Классы тут не при чём. Надо смотреть доку sinon. Но должно работать
 krn
                          p
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          krn
                          p
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  в доке sinon также есть ссылка на proxyquire https://sinonjs.org/how-to/link-seams-commonjs/ проблема в другом. по сути мне нужно написать integration тесты, то есть я общаюсь с app по http. то есть через app я даже достучаться до контроллеров не могу(express если интересно), не говоря о том, чтобы заменить там какие-то либы на свои стабы
Обсуждают сегодня