У меня есть метод, который проверяет, определена ли глобальная функция (она может или не может быть доступна, зависит от запроса каждого клиента). Если он определен, он вызовет его с соответствующими данными. Если нет, он потерпит молчание. Это желаемое поведение.
Что я хочу сделать, так это проверить. Есть ли способ издеваться и / или шпионить за libFunction
, чтобы я мог убедиться, что он вызывается один раз с правильными данными (функция здесь очень упрощена, в процессе происходит некоторая обработка данных).
Вот метод, о котором идет речь:
function sendData(data) {
let exists;
try {
// eslint-disable-next-line no-undef
if (libFunction) exists = true;
} catch (e) {
exists = false;
}
if (exists) {
// eslint-disable-next-line no-undef
libFunction(data);
}
}
Я пытался определить libFunction
в моих тестах, а затем заглушить это, но это не делает то, что я хочу:
describe('sendEvent', function () {
function libFunction(data) {
console.log('hi', data);
}
it('should call libFunction once', function () {
var stub = sinon.stub(libFunction);
var data = "testing";
sendEvent(data);
expect(stub.called).to.be.true;
});
});
Этот тест не проходит, однако: AssertionError: expected undefined to be true
Я пробовал нечто похожее со шпионом:
describe('sendEvent', function () {
function libFunction(data) {
console.log('hi', data);
}
it('should call libFunction once', function () {
var spy = sinon.spy(libFunction);
var data = "testing";
sendEvent(data);
expect(spy.called).to.be.true;
});
});
Это также не помогает: AssertionError: expected false to be true
Есть ли способ сделать это?