Last active
December 22, 2015 18:08
-
-
Save kasperlewau/6510460 to your computer and use it in GitHub Desktop.
Error: No module: app
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
I'm having a go at testing my Angular application. Here's my setup: | |
* Rails Backend & Folder Structure | |
* AngularJS(v.1.1.5) | |
* Restangular | |
* UI-Router | |
* Karma | |
* Jasmine | |
The problem I'm stumbling upon with this code here is this: | |
$ karma start karma.config.js | |
INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/ | |
INFO [launcher]: Starting browser Chrome | |
INFO [Chrome 29.0.1547 (Mac OS X 10.8.2)]: Connected on socket LpsJF2evJ1Yywu3XUI0i | |
Chrome 29.0.1547 (Mac OS X 10.8.2) AppCtrl has variable text "Hello World" FAILED | |
Error: No module: app | |
at Error (<anonymous>) | |
at /Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular-loader.js:80:17 | |
at ensure (/Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular-loader.js:20:38) | |
at module (/Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular-loader.js:78:14) | |
at /Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular.js:2837:24 | |
at Array.forEach (native) | |
at forEach (/Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular.js:148:11) | |
at loadModules (/Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular.js:2833:5) | |
at Object.createInjector [as injector] (/Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular.js:2775:11) | |
at workFn (/Users/kasper/code/kasper/gallery-app/vendor/assets/javascripts/angular/angular-mocks.js:1872:52) | |
TypeError: Cannot read property 'text' of undefined | |
at null.<anonymous> (/Users/kasper/code/kasper/gallery-app/test/front-end/controllers/app.spec.js:11:17) | |
And here's my code | |
#main.js | |
var app = angular.module("app", ['restangular', 'ui.compat']); | |
#app-ctrl.js | |
app.controller("AppCtrl", function($scope) { | |
$scope.safeApply = function(fn) { | |
var phase = this.$root.$$phase; | |
if(phase == '$apply' || phase == '$digest') { | |
if(fn && (typeof(fn) === 'function')) { | |
fn(); | |
} | |
} else { | |
this.$apply(fn); | |
} | |
}; | |
$scope.cancelEvent = function (e) { | |
e.preventDefault(); | |
e.cancelBubble = true; | |
e.returnValue = false; | |
}; | |
$scope.text = "Hello World"; | |
}); | |
#karma.config.js | |
module.exports = function(config) { | |
config.set({ | |
basePath: '', | |
frameworks: ['jasmine'], | |
files: [ | |
'../../vendor/assets/javascripts/angular/*.js', | |
'../../vendor/assets/javascripts/angular-ui-states.js', | |
'../../vendor/assets/javascripts/restangular.js', | |
'../../app/assets/javascripts/*.js', | |
'**/*.spec.js' | |
], | |
exclude: [ | |
'../../vendor/assets/javascripts/angular/angular-scenario.js' | |
], | |
reporters: ['progress'], | |
port: 9876, | |
colors: true, | |
logLevel: config.LOG_INFO, | |
autoWatch: true, | |
browsers: ['Chrome'], | |
captureTimeout: 60000, | |
singleRun: false | |
}); | |
}; | |
#app.spec.js | |
describe('AppCtrl', function () { | |
var scope; | |
beforeEach(angular.mock.module('app')); | |
beforeEach(angular.mock.inject(function($rootScope, $controller) { | |
scope = $rootScope.new; | |
$controller('AppCtrl', {$scope: scope}); | |
})); | |
it('has variable text "Hello World"', function () { | |
expect(scope.text).toBe('Hello World'); | |
}); | |
}); |
First fix: Make sure main.js is included (was located one level deeper).
Second fix: scope = $rootScope.$new(); as opposed to scope = $rootScope.new();
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Updated the beforeEach calls to include 'angular.mock.*'
Had a go without it, didn't end up any better unfortunately :)