Skip to content

Instantly share code, notes, and snippets.

@kasperlewau
Last active December 22, 2015 18:08
Show Gist options
  • Save kasperlewau/6510460 to your computer and use it in GitHub Desktop.
Save kasperlewau/6510460 to your computer and use it in GitHub Desktop.
Error: No module: app
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');
});
});
@kasperlewau
Copy link
Author

Updated the beforeEach calls to include 'angular.mock.*'

Had a go without it, didn't end up any better unfortunately :)

@kasperlewau
Copy link
Author

First fix: Make sure main.js is included (was located one level deeper).

@kasperlewau
Copy link
Author

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