Tuesday 15 January 2013

javascript - Testing angularjs' factory with Karma -



javascript - Testing angularjs' factory with Karma -

i've written mill angularjs have method returns http promise.

'use strict' angular.module('projdefinitapp') .factory 'testservice', ($http) -> { gettest: (testid) -> $http.get "temp/test.json" }

i'm having issues when making test, using karma , jasmine. promise didn't homecoming result. tried create var, phone call function , alter value of var. not updates value:

'use strict' describe 'service: testservice', -> # load service's module beforeeach module 'projdefinitapp' # instantiate service testservice = {} beforeeach inject (_testservice_) -> testservice = _testservice_ 'should something', -> retrieved = undefined testservice.gettest().success ($data,retrieved) -> retrieved = $data homecoming expect(retrieved).tobe(null) homecoming homecoming

the console exit looks this

phantomjs 1.9.8 (linux) service: testservice should failed

expected undefined null.

in tests, angular not perform requests made $http service. reason beingness requests queued run in $digest phase of angular lifecycle. need run through angular’s digest cycle manually in tests calling $rootscope.$apply() or $httpbackend.flush() create phone call internally.

one issue see in current test tests aren’t made work asynchronously, there no guarantee retrieved set before expectation called since promises resolved asynchronously. rewrite tests create work asynchronously:

it 'should something', (done) -> testservice.gettest().success ($data) -> expect($data).tobe(null) done() homecoming $rootscope.$apply() homecoming return

javascript angularjs karma-runner karma-jasmine

No comments:

Post a Comment