栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号