2016-12-03 18 views
1

Я тестирую метод A, который вызывает другой метод B с разными аргументами на основе условий. Поэтому я хотел бы следить за B, чтобы я мог проверить, называется ли его. Но шпиона никогда не называют.Sinon Spy никогда не называется

import parent from '../something.js' 
describe('Testing A',() => { 
    it('should make proper calls to B',() => { 
     var spy = sinon.spy(parent, 'B') 
     parent.A() 
     expect(spy.calledOnce).to.be.true 
    }) 
}) 

и функция тест А будет просто

export const A =() => { 
    B() 
} 

Похоже, в тесте, шпион версия B никогда не вызывается, потому что А вызывает B непосредственно. Как я могу сделать тестовую функцию A для вызова Sinon версии B?

+0

Где B приходит, это внутреннее к модулю, то поступает из другого модуля? – Hosar

+0

Оба A и B исходят от 'parent' – Roy

ответ

1

Мне ваш код не подлежит проверке. Вы должны рассматривать тестируемый модуль как черный ящик и не пытаться настраивать его внутренности. В вашем случае вы пытаетесь заглянуть в метод, который является внутренним для модуля something.js.

Pass B в качестве параметра в A:

export const A = (B) => { 
    B(); 
} 

В этом случае обратного вызова, который очень легко проверить:

import parent from '../something.js' 
describe('Testing A',() => { 
    it('should make proper calls to B',() => { 
     var B = sinon.spy(); 
     parent.A(B); 
     expect(B.calledOnce).to.be.true; 
    }) 
}) 
+0

Это, кажется, лучшая идея. Благодарю. – Roy