2015-10-22 5 views
4

Я пытаюсь проверить, вызван ли какой-либо конкретный метод при определенных условиях, используя мокко, chai и sinon. Вот код:Тестирование вызовов методов с использованием метода sinon on module.exports

function foo(in, opt) { 
    if(opt) { bar(); } 
    else { foobar(); } 
} 

function bar() {...} 
function foobar() {...} 

module.exports = { 
    foo: foo, 
    bar: bar, 
    foobar:foobar 
}; 

Вот код в моем тестовом файле:

var x = require('./foo'), 
    sinon = require('sinon'), 
    chai = require('chai'), 
    expect = chai.expect, 
    should = chai.should(), 
    assert = require('assert'); 

describe('test 1', function() { 

    it('should call bar', function() { 
     var spy = sinon. spy(x.bar); 
     x.foo('bla', true); 

     spy.called.should.be.true; 
    }); 
}); 

Когда я делаю console.log на шпиона он говорит, что это не называлось даже ты с ручной рубки в методе бара я могу видеть, как он вызван. Любые предложения о том, что я могу сделать неправильно или как это сделать?

Благодаря

ответ

7

Вы создали spy, но тестовый код не использует его. Замените оригинальный x.bar с шпиона (не забудьте сделать уборку!)

describe('test 1', function() { 

    before(() => { 

    let spy = sinon.spy(x.bar); 
    x.originalBar = x.bar; // save the original so that we can restore it later. 
    x.bar = spy; // this is where the magic happens! 
    }); 

    it('should call bar', function() { 
     x.foo('bla', true); 

     x.bar.called.should.be.true; // x.bar is the spy! 
    }); 

    after(() => { 
    x.bar = x.originalBar; // clean up! 
    }); 

}); 
+0

необходима Другая модификация, необходимо определить все методы в module.exports и ссылаться на них оттуда, предваряя их с модулем. экспорт. Как только это будет сделано, тесты пройдут с использованием метода, который вы показали. Еще раз спасибо! –

+0

Привет, @ ToniKostelac, через год я столкнулся с той же проблемой. К сожалению, я не могу внести изменения в работу Мадары. Методы уже определены в файле module.exports файла для проверки, нужно ли их определять и в другом месте? и где нужны ссылки? Не могли бы вы написать образец кода, чтобы показать мне? – Noneu

+0

@ Ничего извините за поздний ответ, я давно не был здесь в сети, но, надеюсь, вам удалось это понять. В основном это связано с любыми «частными» методами, которые я использовал внутри своих модулей. Поскольку они не были определены в экспорте, я не мог использовать шпиона на них. –

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