2017-01-24 4 views
1

У меня есть следующая функцияИспользование шпиона и Sinon JS

function trim(value) { 
    if (typeof value === 'string') { 
    if (String.prototype.trim) { 
     value = value.trim(); 
    } else { 
     value = value.replace(/^\s+|\s+$/g, ''); 
    } 

    return value; 
    } 
} 

Я пишу модульный тест для того, чтобы гарантировать, что когда trim называется родной String.prototype.trim называется, если доступно. Я пытаюсь использовать шпиона, чтобы убедиться, что она называется

var Util = require('test/util/methods'); 

it('should use native trim', function() { 
    var spy = sinon.spy(String.prototype, 'trim'); 
    Util.trim('test string '); 
    expect(spy.calledOnce).toEqual(true); 
    expect(Util.trim('test string ')).toEqual('test string'); 
    spy.restore(); 
    }); 

Но что я чувствую, что я должен делать то, что, когда trim называется я должен проверить, что String.prototype.trim называется также.

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

Благодаря

+0

Можете ли вы объяснить, что вы подразумеваете под «функция вызывается и называется« String.prototype.trim' »? Вы вызываете функцию в тесте, так что это, очевидно, называется, нет? Вы хотите сказать, что хотите протестировать не-родную реализацию? –

+0

Извинения за путаницу, я просто хочу проверить, что 'String.prototype.trim' вызывается (если он доступен), что я и делаю сейчас (шпионаж на' String.prototype.trim'). но что, если я хочу следить за 'trim' и гарантировать, что' String.prototype.trim' вызывается впоследствии? Имеет ли это смысл ? – Richlewis

+0

IMO, порядок сборки в модульные тесты не всегда является хорошей идеей. Это делает тесты довольно хрупкими, когда вещи меняются позже. Однако я все еще не совсем понимаю. Вы хотите увидеть, вызывается ли 'Util.trim' до' String.prototype.trim'? –

ответ

1

Так называют trim только один раз, а затем два ваших expect s:

it('should use native trim', function() { 
    var spy = sinon.spy(String.prototype, 'trim'); 
    expect(Util.trim('test string ')).toEqual('test string'); 
    expect(spy.calledOnce).toEqual(true); 
    spy.restore(); 
});