我目前正在使用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
});
答案 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()
回调函数情况下。