用茉莉花嘲笑

时间:2014-12-24 23:21:29

标签: angularjs unit-testing jasmine

我想隔离我的角度单位规格。

我的代码库由工厂和控制器组成:

.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

我的意思是......我只是不知道

1 个答案:

答案 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' } 

如果我理解你要测试的是什么