Kirk Strobeck
Kirk Strobeck

Reputation: 18559

Odd karma error

I was learning from this video http://egghead.io/lessons/angularjs-testing-overview

But instead of a success or failure, I get ..

INFO [watcher]: Changed file "/Users/kirk/git/kirkstrobeck/learn-angular/egghead/app/main.js".
Chrome 31.0.1650 (Mac OS X 10.9.0) filter reverse should reverse a string FAILED
  RangeError: Maximum call stack size exceeded
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:7:73)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:21)
  Error: Declaration Location
      at window.inject.angular.mock.inject (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/bower_components/angular-mocks/angular-mocks.js:2086:25)
      at null.<anonymous> (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:7:42)
      at null.<anonymous> (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:4:10)
      at /Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:2:1
Chrome 31.0.1650 (Mac OS X 10.9.0): Executed 1 of 1 (1 FAILED) ERROR (0.31 secs / 0.02 secs)

My config is

// Karma configuration
// Generated on Tue Dec 03 2013 00:57:22 GMT-0800 (PST)

module.exports = function(config) {
  config.set({

    // base path, that will be used to resolve files and exclude
    basePath: '',


    // frameworks to use
    frameworks: [
      'jasmine'
      //'requirejs'
    ],


    // list of files / patterns to load in the browser
    files: [
      'bower_components/angular/angular.js',
      'bower_components/angular-resource/angular-resource.js',
      'bower_components/angular-mocks/angular-mocks.js',

      'app/*.js',
      'test/unit/*.js'
    ],


    // list of files to exclude
    exclude: [

    ],


    // test results reporter to use
    // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
    reporters: ['progress'],


    // web server port
    port: 9876,


    // enable / disable colors in the output (reporters and logs)
    colors: true,


    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,


    // Start these browsers, currently available:
    // - Chrome
    // - ChromeCanary
    // - Firefox
    // - Opera
    // - Safari (only Mac)
    // - PhantomJS
    // - IE (only Windows)
    browsers: ['Chrome'],


    // If browser does not capture in given timeout [ms], kill it
    captureTimeout: 60000,


    // Continuous Integration mode
    // if true, it capture browsers, run tests and exit
    singleRun: false
  });
};

main.js

// Generated by CoffeeScript 1.6.2
describe('filter', function() {
  beforeEach(module('myApp'));
  return describe('reverse', function() {
    var reverseFilter;

    return it('should reverse a string', inject(reverseFilter = function() {
      return expect(reverseFilter('ABCD')).toEqual('DCBA');
    }));
  });
});

Okay, so now my js doesn't return anything

// Generated by CoffeeScript 1.6.2
describe('filter', function() {
  beforeEach(module('myApp'));
  describe('reverse', function() {
    var reverseFilter;

    it('should reverse a string', inject(reverseFilter = function() {
      expect(reverseFilter('ABCD')).toEqual('DCBA');
    }));
  });
});

I still get this error

$ karma start
INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 31.0.1650 (Mac OS X 10.9.0)]: Connected on socket 7v0AzIkyQdYktlZutK6F
Chrome 31.0.1650 (Mac OS X 10.9.0) filter reverse should reverse a string FAILED
  RangeError: Maximum call stack size exceeded
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:7:66)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
  Error: Declaration Location
      at window.inject.angular.mock.inject (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/bower_components/angular-mocks/angular-mocks.js:2086:25)
      at null.<anonymous> (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:7:35)
      at null.<anonymous> (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:4:3)
      at /Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:2:1
Chrome 31.0.1650 (Mac OS X 10.9.0): Executed 1 of 1 (1 FAILED) ERROR (0.132 secs / 0.025 secs)

      at /Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:2:1
Chrome 31.0.1650 (Mac OS X 10.9.0): Executed 1 of 1 (1 FAILED) ERROR (0.288 secs / 0.012 secs)
^Ckirk:egghead kirk$
kirk:egghead kirk$
kirk:egghead kirk$ karma start
INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 31.0.1650 (Mac OS X 10.9.0)]: Connected on socket 7v0AzIkyQdYktlZutK6F
Chrome 31.0.1650 (Mac OS X 10.9.0) filter reverse should reverse a string FAILED
  RangeError: Maximum call stack size exceeded
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:7:66)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
      at reverseFilter (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:8:14)
  Error: Declaration Location
      at window.inject.angular.mock.inject (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/bower_components/angular-mocks/angular-mocks.js:2086:25)
      at null.<anonymous> (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:7:35)
      at null.<anonymous> (/Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:4:3)
      at /Users/kirk/git/kirkstrobeck/learn-angular/egghead/test/unit/main.js:2:1
Chrome 31.0.1650 (Mac OS X 10.9.0): Executed 1 of 1 (1 FAILED) ERROR (0.132 secs / 0.025 secs)

Success

My coffeescript is now

describe 'filter', ->
  beforeEach module('myApp')

  describe 'reverse', ->
    it 'should reverse a string', inject (reverseFilter) ->
      expect(reverseFilter 'ABCD').toEqual('DCBA')

which compiles to

// Generated by CoffeeScript 1.6.2
describe('filter', function() {
  beforeEach(module('myApp'));
  return describe('reverse', function() {
    return it('should reverse a string', inject(function(reverseFilter) {
      return expect(reverseFilter('ABCD')).toEqual('DCBA');
    }));
  });
});

Upvotes: 0

Views: 957

Answers (1)

Florian F
Florian F

Reputation: 8875

The problem is how you inject the reverseFilter

This is how you should do it :

describe('filter', function() {
  beforeEach(module('myApp'));
  describe('reverse', function() {   
    it('should reverse a string', inject(function(reverseFilter) {
      expect(reverseFilter('ABCD')).toEqual('DCBA');
    }));
  });
});

Considering there is a filter named reverse declared in myApp module :

myApp.filter('reverse', function() {

  return function(value) {
    //return reversed value here
  }
});

Upvotes: 2

Related Questions