Angular单元测试控制器-控制器内部的模拟服务

Angular单元测试控制器-控制器内部的模拟服务,第1张

Angular单元测试控制器-控制器内部的模拟服务

有两种方法(或肯定有更多方法)。

想象一下这种服务(无论它是工厂都没关系):

app.service('foo', function() {  this.fn = function() {    return "Foo";  };});

使用此控制器:

app.controller('MainCtrl', function($scope, foo) {  $scope.bar = foo.fn();});

一种方法是使用要使用的方法创建对象并对其进行监视:

foo = {  fn: function() {}};spyOn(foo, 'fn').andReturn("Foo");

然后,将其

foo
作为dep传递给控制器​​。无需注入服务。那可行。

另一种方法是模拟服务并注入模拟的服务:

beforeEach(module('app', function($provide) {  var foo = {    fn: function() {}  };  spyOn(foo, 'fn').andReturn('Foo');  $provide.value('foo', foo);}));

当您注入时

foo
,它将注入这一点。

在此处查看:http :
//plnkr.co/edit/WvUIrtqMDvy1nMtCYAfo?p=preview

茉莉花2.0:

对于那些努力使答案起作用的人,

从Jasmine 2.0

andReturn()
开始
and.returnValue()

因此,例如,在上面的unk客的第一次测试中:

describe('controller: MainCtrl', function() {  var ctrl, foo, $scope;  beforeEach(module('app'));  beforeEach(inject(function($rootScope, $controller) {    foo = {      fn: function() {}    };    spyOn(foo, 'fn').and.returnValue("Foo"); // <----------- HERE    $scope = $rootScope.$new();    ctrl = $controller('MainCtrl', {$scope: $scope , foo: foo });  }));  it('Should call foo fn', function() {    expect($scope.bar).toBe('Foo');  });});

(来源:Rvandersteen)



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5642057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存