Javascript SinonJS-调用存根之前的属性值
我目前正在使用中进行存根。 从我所看到的情况来看,使用库可以存根和监视方法,但不能监视属性 在下面的示例中,是否有方法检查Javascript SinonJS-调用存根之前的属性值,javascript,angularjs,sinon,Javascript,Angularjs,Sinon,我目前正在使用中进行存根。 从我所看到的情况来看,使用库可以存根和监视方法,但不能监视属性 在下面的示例中,是否有方法检查状态。searchText已设置为状态。在调用提交之前,建议 // currently using angular but applies equally to vanilla js $scope.searchSuggestion = function() { this.state.searchText = this.state.suggestio
状态。searchText
已设置为状态。在调用提交之前,建议
// 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
});
我只是在处理一个类似的问题,所以尽管这是一个很老的问题,我还是回答了
对我有效的方法是将函数替换为执行断言的函数,如下所示:
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()
回调来以防万一。不确定为什么要将sinon
与angularjs
一起使用。AngularJS已经成为一个可测试的框架,它使单元测试变得非常容易。在您的案例中,在调用searchSuggestion()
后的最后或刚刚调用expect(scope.state.searchText).toBe(scope.state.suggestion)
行中添加searchText
以便查看searchText是否有新值。希望有帮助。是的,检查它是否改变不是问题。我想测试它在调用submit
之前是否已更改。Sinon.js是一个存根框架。与AngularJS结合使用非常有用。在本例中使用它允许be检查submit
是否被调用expect(scope.submit.called).to.be(true)