在指令的单元测试中模拟服务的值

Mock the value of a service inside directive's unit test

在我的指令实例化中,我调用了一个方法 returns 一些数据:

data = myService.getData()

以及稍后我正在做的代码 something = data[id]

在 karma 中我有一个错误,cannor read id of undefined,这意味着 data 是未定义的。

我尝试像这样模拟对服务的调用:

spyOn(myService, 'getData').and.returnValue(mockData);

但问题依旧。 如何在我的测试中模拟 data

 # Injector
  beforeEach(inject(($injector) ->

    $compile = $injector.get('$compile')
    $rootScope = $injector.get('$rootScope')
    $scope = $rootScope.$new()
    $httpBackend = $injector.get('$httpBackend')
    myService = $injector.get('myService')

    element = angular.element('<my-directive id="0"></my-directive>')
    template = $compile(element)($scope)
    $scope.$digest()

    spyOn(myService, 'getData').and.returnValue(someMockData)
  ))

因此,与其使用实际服务,不如创建一个 jasmine 间谍。

var myService = jasmine.createSpyObj('myService', ['getData']);

beforeEach(inject(($injector, $provide) => {

     // injector.gets ... don't get 'myService'
     . . . 

     $provide.value('myService', myService);

}))

it('should return data from service', () => {

    myService.getData.andReturn(['your mocked data']);

    // rest of test

})