SinonJS - Stub Called之前的属性值

时间:2015-02-12 05:57:43

标签: javascript angularjs sinon

我目前正在使用sinon.js进行存根。 可以对方法进行存根和间谍,但不能使用我能看到的库中的属性。

在以下示例中,是否有办法在调用 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
    });

1 个答案:

答案 0 :(得分:0)

我只是处理类似的问题,所以尽管这是一个相当古老的问题,但仍在回答。

对我有用的方法是用一个做断言的函数替换函数,所以像这样:

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()回调函数情况下。