我想隔离我的角度单位规格。
我的代码库由工厂和控制器组成:
.factory('ServiceData', ->
{ message: 'im data from a factory service' }
)
.controller('Controller', ['$scope','ServiceData',($scope, ServiceData)->
$scope.serviceData = ServiceData
这是控制器的规格:
it 'should get data from a service', ->
spyOn(ServiceData, 'message').andReturn('im from a mock') # this doesn't work
expect($scope.serviceData).toEqual 'im from a mock'
规范不起作用,因为我收到以下错误:
ReferenceError: ServiceData is not defined in ...controller_spec.js
我想将我的控制器规格与工厂隔离开来。我如何实现这一目标?
此外,这是一个简单的例子,但将来我将拥有非常复杂的工厂,从服务器和各种类型获取数据。所以我想知道如何将它们删除。
我也可能想根据模拟函数返回的不同内容来测试我的控制器的行为,所以我肯定想要使用这种方法。
我尝试使用$provide
,但取得了很大的成功
beforeEach ->
module 'App', ($provide)->
$provide.value 'serviceData', { message: 'im from a mock' }
结果:
Error: [ng:areq] Argument 'fn' is not a function, got Object
我的意思是......我只是不知道
答案 0 :(得分:0)
引用:
it 'should get data from a service', ->
spyOn(ServiceData, 'message').andReturn('im from a mock') # this doesn't work
expect($scope.serviceData).toEqual 'im from a mock'
规范不起作用,因为我收到以下错误:
ReferenceError:ServiceData未定义在... controller_spec.js
中
/报价
我认为应该更像这样:
it 'should get data from a service', -> //this is coffeescript syntax you're using I assume
$scope.serviceData = ServiceData.serviceData
expect($scope.serviceData).toEqual 'im from a service'
//where ServiceData is defined as a service that returns a Plain Old Javascript Object
//and that service returns an object in format: { serviceData: 'im from a service' }
如果我理解你要测试的是什么