在AngularJS测试$资源服务 [英] Testing $resource services in AngularJS
问题描述
我想开始编写单元测试我的角度应用,并触及栓块pretty快,我不确定究竟如何嘲笑我的服务可测试的方式。结果
有没有一种办法,否则嘲笑REST调用它似乎像我需要的镜子,我在我的测试服务中的一切这看起来不正确给我,但我是相当新的测试写入,所以也许这是它应该是怎样要完成。任何帮助将大大AP preciated。
我的服务如下:
angular.module('resources.users',['ngResource'])。
工厂(用户,函数($资源){
VAR资源= $资源('/ API / index.php文件/用户/:用户名',{},{
更新:{方法:把'}
});resource.getUser =功能(用户名,successCb){
返回resource.query(
{用户名:用户名},
successCb
);
};返回的资源;
});
我的测试包括迄今为止的:
描述(用户,函数(){
VAR mockUserResource;
beforeEach(模块('resources.users'));
beforeEach(函数(){
mockUserResource = sinon.stub({
的getUser:功能(用户名){
mockUserResource.query({用户名:用户名});
},
查询:功能(){
}});
模块(函数($提供){
$ provide.value(用户,mockUserResource);
})
});
描述(的getUser',函数(){
它('应该调用的getUser与用户名,注入(功能(用户){
User.getUser('测试');
期待(mockUserResource.query.args [0] [0])toEqual({用户名:'测试'});
}));})
});
您可以通过模拟像ngResource此提出的要求:
描述(用户,函数(){
VAR mockUserResource,$ httpBackend;
beforeEach(angular.mock.module('对myApp')); beforeEach(函数(){
angular.mock.inject(函数($喷油器){
$ httpBackend = $ injector.get('$ httpBackend');
mockUserResource = $ injector.get(用户);
})
}); 描述(的getUser',函数(){
它('应该调用的getUser与用户名,注入(功能(用户){
$ httpBackend.expectGET('/ API / index.php文件/用户/测试)
。响应([{
用户名:测试
}]); VAR的结果= mockUserResource.getUser('测试'); $ httpBackend.flush(); 期待(结果[0] .username).toEqual('测试');
})); });
});
<大骨节病> 演示 骨节病>
I am trying to begin writing unit tests for my angular application and hit a stopping block pretty quick as I am unsure of how exactly to mock my service in a testable way.
Is there a way to mock the REST call otherwise it would seem like I need to mirror everything within my service in my tests which doesn't seem right to me, but I am rather new to test writing so maybe this is how it is supposed to be accomplished. Any help would be greatly appreciated.
My service is as follows:
angular.module('resources.users', ['ngResource']).
factory('User', function($resource) {
var resource = $resource('/api/index.php/users/:username', {}, {
'update': {method: 'PUT'}
});
resource.getUser = function(username, successCb) {
return resource.query(
{username: username},
successCb
);
};
return resource;
});
My test consists thus far of:
describe('User', function() {
var mockUserResource;
beforeEach(module('resources.users'));
beforeEach(function() {
mockUserResource = sinon.stub({
getUser: function(username) {
mockUserResource.query({username: username});
},
query: function() {
}});
module(function($provide) {
$provide.value('User', mockUserResource);
})
});
describe('getUser', function() {
it('should call getUser with username', inject(function(User) {
User.getUser('test');
expect(mockUserResource.query.args[0][0]).toEqual({username: 'test'});
}));
})
});
You can mock the requests made by ngResource like this:
describe('User', function () {
var mockUserResource, $httpBackend;
beforeEach(angular.mock.module('myApp'));
beforeEach(function () {
angular.mock.inject(function ($injector) {
$httpBackend = $injector.get('$httpBackend');
mockUserResource = $injector.get('User');
})
});
describe('getUser', function () {
it('should call getUser with username', inject(function (User) {
$httpBackend.expectGET('/api/index.php/users/test')
.respond([{
username: 'test'
}]);
var result = mockUserResource.getUser('test');
$httpBackend.flush();
expect(result[0].username).toEqual('test');
}));
});
});
这篇关于在AngularJS测试$资源服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!