mcv
mcv

Reputation: 4429

Karma AngularJS testing: no tests found, describe() doesn't seem to exist

My Angular app had perfectly working unit tests. Someone else reorganized some stuff and added bower for dependencies for this and other related projects. Ever since, unit tests have been failing. I'm now trying to fix it again.

When I started, I had a bunch of failing unit tests. I ran bower to install the dependencies, but now no unit tests run at all. When I look at the source code for my unit tests, my IDE (IntelliJ) doesn't recognize the describe(), beforeEach() and it() functions. It does recognize module() and inject() (both from angular-mocks).

Here's my karma.conf.js:

module.exports = function (config) {
    config.set({
            basePath: '../',
            frameworks: ['jasmine'],
            files: [
                'app/lib/jquery/jquery.min.js',
                'app/lib/angular/angular.js',
                'app/lib/angular-*/angular-*.js',
                'app/lib/mylib-core/build/js/global.js',
                'app/lib/mylib-components/build/js/components.js',
                'app/js/*.js',
                'app/js/**/*.js',
                'test/unit/**/*Spec.js',
                'test/mocks/mockdata.js'
            ],
            plugins: [
                'karma-jasmine',
                'karma-junit-reporter',
                'karma-coverage',
                'karma-chrome-launcher',
                'karma-phantomjs-launcher'
            ],
            exclude: [
            ],
            reporters: ['progress', 'coverage'],
            preprocessors: {
                'app/js/**/*.js': 'coverage'
            },
            coverageReporter: {
                type: 'html',
                dir: 'coverage'
            },
            colors: true,
            logLevel: config.DEBUG,
            autoWatch: true,
            browsers: ['PhantomJS'],
            captureTimeout: 60000,
            singleRun: false
        }
    );
};

The output of my unit tests:

C:\Workset\tools\nodejs\node.exe C:\Workset\tools\npm\node_modules\karma\bin\karma start config/karma.conf.js
DEBUG [plugin]: Loading plugin karma-jasmine.
DEBUG [plugin]: Loading plugin karma-junit-reporter.
DEBUG [plugin]: Loading plugin karma-coverage.
DEBUG [plugin]: Loading plugin karma-chrome-launcher.
DEBUG [plugin]: Loading plugin karma-phantomjs-launcher.
DEBUG [plugin]: Loading inlined plugin (defining ).
INFO [karma]: Karma v0.10.4 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
DEBUG [launcher]: Creating temp dir at C:\foo\Temp\karma-38315490
DEBUG [launcher]: C:\Workset\tools\npm\node_modules\karma-phantomjs-launcher\node_modules\phantomjs\lib\phantom\phantomjs.exe C:\foo\Temp\karma-38315490/capture.js
DEBUG [preprocessor.coverage]: Processing "C:/workspace/myproject/app/js/myproject.js".
DEBUG [preprocessor.coverage]: Processing "C:/workspace/myproject/app/js/controllers/FooController.js".
DEBUG [preprocessor.coverage]: Processing "C:/workspace/myproject/app/js/directives/fooRating.js".
DEBUG [preprocessor.coverage]: Processing "C:/workspace/myproject/app/js/myproject.js".
DEBUG [preprocessor.coverage]: Processing "C:/workspace/myproject/app/js/services/fooService.js".
DEBUG [watcher]: Resolved files:
C:/Workset/tools/npm/node_modules/karma-jasmine/lib/jasmine.js
C:/Workset/tools/npm/node_modules/karma-jasmine/lib/adapter.js
C:/workspace/myproject/app/lib/jquery/jquery.min.js
C:/workspace/myproject/app/lib/angular/angular.js
C:/workspace/myproject/app/lib/angular-animate/angular-animate.js
C:/workspace/myproject/app/lib/angular-animate/angular-animate.min.js
C:/workspace/myproject/app/lib/angular-cookies/angular-cookies.js
C:/workspace/myproject/app/lib/angular-cookies/angular-cookies.min.js
C:/workspace/myproject/app/lib/angular-loader/angular-loader.js
C:/workspace/myproject/app/lib/angular-loader/angular-loader.min.js
C:/workspace/myproject/app/lib/angular-mocks/angular-mocks.js
C:/workspace/myproject/app/lib/angular-resource/angular-resource.js
C:/workspace/myproject/app/lib/angular-resource/angular-resource.min.js
C:/workspace/myproject/app/lib/angular-route/angular-route.js
C:/workspace/myproject/app/lib/angular-route/angular-route.min.js
C:/workspace/myproject/app/lib/angular-sanitize/angular-sanitize.js
C:/workspace/myproject/app/lib/angular-sanitize/angular-sanitize.min.js
C:/workspace/myproject/app/lib/angular-scenario/angular-scenario.js
C:/workspace/myproject/app/lib/angular-touch/angular-touch.js
C:/workspace/myproject/app/lib/angular-touch/angular-touch.min.js
C:/workspace/myproject/app/js/myproject.js
C:/workspace/myproject/app/js/controllers/FooController.js
C:/workspace/myproject/app/js/directives/fooRating.js
C:/workspace/myproject/app/js/services/fooService.js
C:/workspace/myproject/test/unit/controllers/fooControllerSpec.js
C:/workspace/myproject/test/unit/directives/fooRatingSpec.js
C:/workspace/myproject/test/unit/services/fooServiceSpec.js
C:/workspace/myproject/test/mocks/mockdata.js
DEBUG [watcher]: Watching "C:/workspace/myproject/app/lib/jquery/jquery.min.js"
DEBUG [watcher]: Watching "C:/workspace/myproject/app/lib/angular/angular.js"
DEBUG [watcher]: Watching "C:/workspace/myproject/app/lib"
DEBUG [watcher]: Watching "C:/workspace/myproject/app/js"
DEBUG [watcher]: Watching "C:/workspace/myproject/test/unit"
DEBUG [watcher]: Watching "C:/workspace/myproject/test/mocks/mockdata.js"
DEBUG [web-server]: serving: C:\Workset\tools\npm\node_modules\karma\static/client.html
DEBUG [web-server]: serving: C:\Workset\tools\npm\node_modules\karma\static/karma.js
DEBUG [karma]: A browser has connected on socket 5Njwd5GANrKy9YV2vANC
INFO [PhantomJS 1.9.2 (Windows 7)]: Connected on socket 5Njwd5GANrKy9YV2vANC
DEBUG [karma]: All browsers are ready, executing
DEBUG [web-server]: serving: C:\Workset\tools\npm\node_modules\karma\static/context.html
DEBUG [web-server]: serving: C:/Workset/tools/npm/node_modules/karma-jasmine/lib/jasmine.js
DEBUG [web-server]: serving: C:/Workset/tools/npm/node_modules/karma-jasmine/lib/adapter.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/jquery/jquery.min.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular/angular.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-animate/angular-animate.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-animate/angular-animate.min.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-cookies/angular-cookies.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-cookies/angular-cookies.min.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-loader/angular-loader.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-loader/angular-loader.min.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-mocks/angular-mocks.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-resource/angular-resource.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-resource/angular-resource.min.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-route/angular-route.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-route/angular-route.min.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-sanitize/angular-sanitize.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-sanitize/angular-sanitize.min.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-scenario/angular-scenario.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-touch/angular-touch.js
DEBUG [web-server]: serving: C:/workspace/myproject/app/lib/angular-touch/angular-touch.min.js
DEBUG [web-server]: serving: C:\foo\Temp/b172f859347e22405c33fb8b757f7f6380c111f8.js
DEBUG [web-server]: serving: C:\foo\Temp/364a64513852785c67f39bc5bd6bacfd6d007792.js
DEBUG [web-server]: serving: C:\foo\Temp/221e578dd0aa30690853d25857681c2bdfe38fe6.js
DEBUG [web-server]: serving: C:\foo\Temp/75b9b08be8e14ecb83a385484eb40c5b551a3294.js
DEBUG [web-server]: serving: C:/workspace/myproject/test/unit/controllers/fooControllerSpec.js
DEBUG [web-server]: serving: C:/workspace/myproject/test/unit/directives/fooRatingSpec.js
DEBUG [web-server]: serving: C:/workspace/myproject/test/unit/services/fooServiceSpec.js
DEBUG [web-server]: serving: C:/workspace/myproject/test/mocks/mockdata.js
PhantomJS 1.9.2 (Windows 7): Executed 0 of 0 ERROR (0.363 secs / 0 secs)

I can see my *Spec.js files in there, as well as angular-mock.js and jasmine.js. And it doesn't give any errors, yet it thinks there are 0 tests (which I assure you is not the case). So what's going wrong here?

Upvotes: 0

Views: 1958

Answers (1)

mcv
mcv

Reputation: 4429

I figured it out. The debug output mentions that it has loaded C:/workspace/myproject/app/lib/angular-scenario/angular-scenario.js, and that's because of the 'app/lib/angular-*/angular-*.js' line in my karma.conf.js.

The problem with angular-scenario.js is that it is a totally different test framework that jasmine, but it uses the same syntax, so angular-scenario.js defines the same functions that jasmine.js defines, overwriting the functions I need with ones I don't need. So all my tests get registered with angular-scenario, and not with jasmine. So when jasmine executes all registered tests, it finds no tests to execute.

Adding:

exclude: [
    'app/lib/angular-scenario/angular-scenario.js'
],

to my karma.conf.js fixed the problem. Well, this problem. I've still got plenty of other problems with my tests, but I'll try to fix those on my own first.

Upvotes: 2

Related Questions