【发布时间】:2013-12-11 21:10:38
【问题描述】:
我刚开始在 jasmine 测试中使用 sinon 库,但无法在存根上获得预期的行为。它没有报告该函数被调用,即使在我调试时,我可以看到它被调用。可能我设置的存根不正确。我还尝试了“调用”而不是“调用一次”,只是为了确保这不是调用次数问题。
这是sut:
(function(){
angular.module('app', []);
var serviceId = "inSearchViewModel";
angular.module('app').factory(serviceId,[inSearchViewModel])
function inSearchViewModel()
{
var vm = {
isSearchCriteriaValid : isSearchCriteriaValid,
searchAttempted: false,
searchCompleted: false,
performSearch: performSearch
}
return vm;
function isSearchCriteriaValid()
{
return true;
}
function performSearch()
{
vm.searchAttempted = true;
if (isSearchCriteriaValid())
{
search()
}
}
function search()
{
vm.searchCompleted = true;
}
}
})();
这是我的测试:
describe("inSearchViewModel", function () {
beforeEach(module('app'));
beforeEach(function () {
inject(function ($injector) {
inSearchViewModel = $injector.get('inSearchViewModel');
});
var sut = inSearchViewModel;
});
describe('performSearch() ', function () {
it('when search criteria is not valid performs no search',function() {
var isSearchCriteriaValidStub = sinon.stub(sut,"isSearchCriteriaValid").returns(false);
sut.performSearch();
expect(sut.searchAttempted).toBe(true);
expect(sut.searchCompleted).toBe(false);
sinon.assert.calledOnce(isSearchCriteriaValidStub);
sinon.assert.called(isSearchCriteriaValidStub);
});
});
});
【问题讨论】: