2015-02-12 3 views
0

В настоящее время я использую sinon.js для набивки. Можно заглушить и шпионить по методам, но не свойствам, использующим библиотеку из того, что я мог видеть.SinonJS - Значение свойства перед вызовом Stub

В следующем примере, будет ли способ, чтобы проверить, что state.searchText был установлен state.suggestionперед темsubmit называется?

// currently using angular but applies equally to vanilla js 
    $scope.searchSuggestion = function() { 
     this.state.searchText = this.state.suggestion; 
     this.submit(); 
    }; 

идеальный код тестирования:

it('should set the searchText to be the suggestion', function(){ 
     // arrange 
     sinon.stub(scope, 'submit'); 
     scope.state.searchText = 'old value'; 
     scope.state.suggestion = 'new value'; 
     // act 
     scope.searchSuggestion(); 
     // assert 
     expect(scope.submit.called).to.be(true) 
     // ~not sure how to see if searchText was set first 
    }); 
+0

Не знаете, почему вы хотите использовать 'sinon' с' angularjs'. AngularJS уже стал тестируемой базой, и он делает простой тест. В вашем случае в конце или сразу после того, как вы вызываете 'searchSuggestion()' добавьте строку 'expect (scope.state.searchText) .toBe (scope.state.suggestion)', чтобы вы могли видеть, имеет ли 'searchText' новое значение или нет. Надеюсь, поможет. – themyth92

+0

Да, проверка того, изменилась ли она, не является проблемой. Я хочу проверить, что оно изменилось * до того, как вызывается 'submit'. Sinon.js - это стержень. Крайне полезно использовать его в комбинации с AngularJS. Использование в этом случае позволяет проверить, что 'submit' был вызван' expect (scope.submit.called) .to.be (true) ' – alexreardon

ответ

0

Я просто имеем дело с подобным вопросом, так отвечая, несмотря на это будучи довольно старый Q.

Подход, который работал для меня была замена с тем, что делает утверждение, так что примерно так:

it('should set the searchText to be the suggestion', function(){ 
    scope.state.searchText = 'old value'; 
    scope.state.suggestion = 'new value'; 

    scope.submit = function() { 
     expect(whatever).to.equal(somethingElse); 
    }; 

    scope.searchSuggestion(); 
}); 

Этот способ когда submit вызывается, вы можете проверить предварительные условия, используя любое утверждение, которое вы хотите. Даунсайд - вам, возможно, придется добавить дополнительный код, чтобы обработать восстановление исходной функции, и если функция никогда не будет вызвана, тест пройдет без сбоев, поэтому вам может понадобиться обратный вызов done() на всякий случай.

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