我试图开始写我的角度应用程序的单元测试,并打了一个停止块相当快,因为我不知道如何确切地模拟我的服务在一个可测试的方式。
是否有一种方式来模拟REST调用,否则它似乎需要镜像我的服务内的一切,在我的测试,这似乎不对我,但我是新的测试写作,所以也许这是怎么回事完成。任何帮助将不胜感激。
是否有一种方式来模拟REST调用,否则它似乎需要镜像我的服务内的一切,在我的测试,这似乎不对我,但我是新的测试写作,所以也许这是怎么回事完成。任何帮助将不胜感激。
我的服务如下:
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; });
我的测试包括:
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'}); })); }) });
你可以模拟ngResource的请求,像这样:
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'); })); }); });