unit testing - How to test angularjs resource with injected constant -
i struggling writing tests restful resource. i'm new frameworks, please adjust explanation accordingly.
i using angular-mocks + karma-jasmine unit testing. , here rest resource test object:
angular.module('resources', ['ngresource']) .factory('login', function($resource, helpers) { homecoming $resource( helpers.getapiurl() + 'login' ); })
helpers constant defined in module:
app = angular.module('app', ['ngroute', 'filters', 'services', 'resources']).constant('helpers', { getlanguage : function() { homecoming angular.element('meta[http-equiv]').attr('content'); }, getapiurl : function() { homecoming '<%= @site.config[:api] %>'.replace(/\%\{lang\}/,this.getlanguage() + '.'); } }).config(['$routeprovider', '$anchorscrollprovider', 'helpers', config]).run(runner)
and finally, here's problematic unit test:
describe("resources test suite", function() { var mockhelpers; beforeeach(function(){ mockhelpers = sinon.stub({ getlanguage: function() {return 'de';}, getapiurl: function(){ homecoming 'http://testapiurl/';} }); module('app', function($provide) { $provide.constant('helpers', mockhelpers); }) }); beforeeach(module('resources')); describe('login resource', function() { it('should send post resquest /login', inject(function(login, $httpbackend, helpers){ var url = 'http://testapiurl/login', info = 'mock data', headers = {"accept": "application/json, text/plain, */*", "content-type":"application/json;charset=utf-8"}, successcallback = jasmine.createspy('success'), errorcallback = jasmine.createspy('error'); $httpbackend.expectpost(url, data, headers).respond(200, {token:'oh yeah!'}); var reply = login.save(data); $httpbackend.flush(); expect(answer.token).tobe('oh yeah!'); expect(errorcallback).not.tohavebeencalled(); })) }) });
the test failing , have no thought why. seems mock getapiurl function isn't defined (here console output karma):
chrome 34.0.1847 (linux) resources test suite login resource should send post resquest /login failed error: unexpected request: post undefinedlogin expected post http://testapiurl/login
i stuck here. have thought might going wrong? i'll appreciate help.
ok, seems, sinon stub not doing expected. test passes now:
beforeeach( function () { mockhelpers = { getapiurl: function(){ homecoming 'testapiurl/';} }; module('app',function($provide) {$provide.constant('helpers', mockhelpers);}); } );
angularjs unit-testing
No comments:
Post a Comment