【问题标题】:How to mock or callFake a basic javascript function?如何模拟或调用伪造一个基本的 javascript 函数?
【发布时间】:2016-03-19 12:37:56
【问题描述】:

我有两个函数 funcA() 和 funcB(),我正在为 $scope.funcA() 编写单元测试用例。

定义如下:

function funcB(){
//statements
 console.log("At function B");
};

$scope.funcA() = function(){
funcB(); 
console.log("At function A");
};

现在,当我测试我的 $scope.funcA() 时,实际上正在调用我的 funcB()。如何阻止这种情况并对 funcB() 进行假调用或模拟;在茉莉花中。

【问题讨论】:

  • 你不能。该功能必须可访问才能让您监视它。事实上,您的 funcB 只能从控制器内部访问。见here
  • @yarons 嗨,正确的方法是什么,我应该让我的 funcB() 像 $scope.funcB(){} 一样,以便我能够测试它吗?跨度>
  • 我不知道有其他方法可以做到这一点

标签: javascript angularjs unit-testing jasmine


【解决方案1】:

您可以使用spyOn()andCallFake() 来实现它。 在这里查看我之前的答案之一。 Does Jasmine's spyOn() allow the spied on function to be executed?

希望这会有所帮助。

编辑

对于较新版本的 jasmine,语法为

spyOn($scope, 'funcB').and.callFake(function() {
      return 'something';
});

如需完整列表,请参阅 - http://jasmine.github.io/2.0/introduction.html

【讨论】:

  • 您好,您能否在我的问题中向我展示我给定示例的演示,我已经尝试了很多,如果您可以通过我的示例向我展示,我会很高兴。
  • 你应该创建一个 plunk/jsfiddle
  • 看到 funcB 只是一个基本的 javascript 函数,即 function funcB(){ //statements } 现在我做的是这个 var mockfuncB = jasmine.createSpy("funcB" ); spyOn(mockfuncB, 'funcB').and.callFake(function(){ });我想做的是我想从 funcA() 对 funcB() 进行假调用。 但显示 funcB() 方法不存在的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
相关资源
最近更新 更多