Angularjs 在指令内模拟服务的值';s单元测试
在指令的实例化中,我调用了一个返回一些数据的方法:Angularjs 在指令内模拟服务的值';s单元测试,angularjs,unit-testing,jasmine,karma-runner,Angularjs,Unit Testing,Jasmine,Karma Runner,在指令的实例化中,我调用了一个返回一些数据的方法: data=myService.getData() 在后面的代码中,我正在做 something=data[id] 在业力中,我有一个错误,不能读取未定义的id,这意味着数据未定义 我试图模拟呼叫服务,如: spyOn(myService,'getData')。和.returnValue(mockData) 但问题依然存在如何在我的测试中模拟数据? # Injector beforeEach(inject(($injector) ->
data=myService.getData()
在后面的代码中,我正在做
something=data[id]
在业力中,我有一个错误,不能读取未定义的id,这意味着数据
未定义
我试图模拟呼叫服务,如:
spyOn(myService,'getData')。和.returnValue(mockData)代码>
但问题依然存在如何在我的测试中模拟数据
?
# 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)
))
喷油器
每次之前(注入($injector)->
$compile=$injector.get(“$compile”)
$rootScope=$injector.get(“$rootScope”)
$scope=$rootScope.$new()
$httpBackend=$injector.get(“$httpBackend”)
myService=$injector.get('myService'))
元素=角度。元素(“”)
模板=$compile(元素)($scope)
$scope.$digest()
spyOn(myService,'getData')。和.returnValue(someMockData)
))
因此,不要使用实际的服务,而是创建一个jasmine spy
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
})
不傻,但你在哪里定义了一些MockData?@mikeswright49在文件的顶部。是明确定义的。当我像您一样插入
提供程序时,我有未知提供程序:$providerProvider对不起。我的错误。它应该是$provide
。我会更新原始答案。