我只想在不引导Angular的情况下测试服务。
我看了一些例子和教程,但是我什么也不会去。
我只有三个文件:
myService.js:在这里定义AngularJS服务
test_myService.js:在这里定义服务的Jasmine测试。
specRunner.html:一个具有常规茉莉花配置的HTML文件,在其中导入了前两个其他文件以及茉莉花,Angularjs和angular-mocks.js。
这是该服务的代码(在未测试时可以正常工作):
var myModule = angular.module('myModule', []);
myModule.factory('myService', function(){
var serviceImplementation = {};
serviceImplementation.one = 1;
serviceImplementation.two = 2;
serviceImplementation.three = 3;
return serviceImplementation
});
当我尝试单独测试服务时,我应该能够访问它并检查其方法。我的问题是:如何在不引导AngularJS的情况下在测试中注入服务?
例如,如何使用Jasmine测试服务方法返回的值,如下所示:
describe('myService test', function(){
describe('when I call myService.one', function(){
it('returns 1', function(){
myModule = angular.module('myModule');
//something is missing here..
expect( myService.one ).toEqual(1);
})
})
});
问题在于,在上面的示例中未调用实例化服务的factory方法(仅创建模块不会实例化服务)。
为了实例化服务,必须在定义我们服务的模块中调用angular.injector。然后,我们可以向新的注入器对象请求服务,并且只有在最终实例化服务时才向它请求。
像这样的作品:
describe('myService test', function(){
describe('when I call myService.one', function(){
it('returns 1', function(){
var $injector = angular.injector([ 'myModule' ]);
var myService = $injector.get( 'myService' );
expect( myService.one ).toEqual(1);
})
})
});
另一种方法是使用’ invoke ‘ 将服务传递给函数:
describe('myService test', function(){
describe('when I call myService.one', function(){
it('returns 1', function(){
myTestFunction = function(aService){
expect( aService.one ).toEqual(1);
}
//we only need the following line if the name of the
//parameter in myTestFunction is not 'myService' or if
//the code is going to be minify.
myTestFunction.$inject = [ 'myService' ];
var myInjector = angular.injector([ 'myModule' ]);
myInjector.invoke( myTestFunction );
})
})
});
最后,“正确”的方法是在“ beforeEach ”茉莉花块中使用“
inject
”和“
module ”
。在执行此操作时,我们必须意识到“注入”功能不是在标准的angularjs软件包中,而是在ngMock模块中,并且它只能与茉莉一起使用。
describe('myService test', function(){
describe('when I call myService.one', function(){
beforeEach(module('myModule'));
it('returns 1', inject(function(myService){ //parameter name = service name
expect( myService.one ).toEqual(1);
}))
})
});
问题内容: 我正在尝试测试AngularJS服务,但似乎不起作用。 谁能解释为什么响应为空? 问题答案: 试试这个: 请求返回的响应对象在属性(docs)中具有响应数据。
问题内容: 我正在努力使用Karma + Jasmine测试AngularJS工厂。 我无法将工厂注入变量。 我究竟做错了什么? 注意:文件已正确加载 厂: 码: 输出: 问题答案: 您需要致电:
问题内容: 我正在使用Jasmine编写AngularJS的指令测试,并与它们一起使用templateUrl:https : //gist.github.com/tanepiper/62bd10125e8408def5cc 但是,当我运行测试时,我得到了要点中包含的错误: 从我在文档中阅读的内容来看,我认为自己做得正确,但是事实并非如此-我在这里想念的是什么? 谢谢 问题答案: 如果您使用的是ng
全部: 我对Jasmine测试非常陌生,我想知道的一个关于异步测试的问题是: 有谁能简单解释一下Jasmine是如何知道里面有一个done()函数调用并等待它完成的? 例如,如果我把一些异步调用在之前: Jasmine怎么知道它应该让规范测试等待? 谢谢
问题 假如你正在使用 CoffeeScript 写一个简单地计算器,并且想要验证其功能是否与预期一致。可以使用 Jasmine 测试框架。 讨论 在使用 Jasmine 测试框架时,你要在一个参数(spec)文档中写测试,文档描述的是代码需要测试的预期功能。 例如,我们希望计算器可以实现加法和减法的功能,并且可以正确进行正数和负数的运算。我们的 spec 文档如下列所示。 # calculator
问题内容: 根据Michal Charemza帖子编辑。 我有一个代表angularui模态对话框的服务: 如果用户单击对话框中的“确定”,则在调用delete方法时将执行。 问题是我无法对此进行单元测试。 这是我的考验。我已经正确注入了q服务,但是我不确定应该从间谍那里返回什么… 但是我正在接受。这意味着…部分没有执行。我想念什么? 问题答案: 要模拟返回承诺的函数,它还需要返回承诺,然后需要将