Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tests in AngularJS: Reference error of the inject function

I try to test the code below:

describe('myService test', function () {
    describe('when I call myService.one', function () {
        beforeEach(angular.module('TargetMarketServices'));
        it('returns 1', inject(function (imagesRepository) {
            expect(true).toEqual(true);
        }));

    });

});

When this code is executed I get this error:

TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)')
    at http://localhost:8080/testacular.js:76
    at http://localhost:8080/context.html:35
ReferenceError: Can't find variable: inject
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:6
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:8
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:10

PhantomJS 1.8: Executed 1 of 3 (1 FAILED) (skipped 2) (0.072 secs / 0.01 secs)

For my test, I use Testacular with Jasmine and PhantomJS.

like image 551
ChriX Avatar asked Feb 07 '13 22:02

ChriX


2 Answers

AngularJS provides two testing libraries:

  • angular-mocks.js
  • angular-scenario.js

angular-mocks is used for Jasmine and Karma testing. It publishes global methods module() and inject() to be used in your Jasmine spec tests. This means you must load the angular-mocks.js script (after you load the angular.js library/script)

angular-scenario is only used for e2e testing.

like image 190
user2747330 Avatar answered Oct 14 '22 20:10

user2747330


The line where you have

beforeEach(angular.module('TargetMarketServices'));

should be

beforeEach(module('TargetMarketServices'));

If you take a look at the angular-phonecat project in test/unit/directivesSpec.js it uses

beforeEach(module('myApp.directives'));

If I modify it to use angular.module instead:

beforeEach(angular.module('myApp.directives'));

then I get this error when running testacular also:

TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)')
like image 36
Ryan O'Neill Avatar answered Oct 14 '22 19:10

Ryan O'Neill