【问题标题】:Why is sinon stub not working as expected?为什么 sinon 存根没有按预期工作?
【发布时间】: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);

        });
    });
});

【问题讨论】:

    标签: angularjs jasmine sinon


    【解决方案1】:

    在查看代码后,我发现了错误发生的位置,并且仅在为 SO 创建了一个完整的人为示例之后:)。对 isSearchCriteriaValid() 的调用实际上应该通过 vm 实例。所以应该是 vm.isSearchCriteriaValid()。

    function performSearch()
    {
      vm.searchAttempted = true;
    
      //if (isSearchCriteriaValid())
       if (vm.isSearchCriteriaValid())
      {
          search()
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 2021-01-03
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多