在指令的单元测试中模拟服务的值
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
})
在我的指令实例化中,我调用了一个方法 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
})