Мое приложение кроме jRuby/Rails
использует AngularJS
, CoffeScript
. Я хочу протестировать свой javascript с помощью Jasmine
и запустить его с помощью Karma
(он же Testacular
), но получаю сообщение об ошибке, указывающее, что мой модуль Angular нигде не определен. Что у меня получилось: установил Node.js
и Karma
, сгенерировал конфиг файл:
// base path, that will be used to resolve files and exclude
basePath = '../';
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
'vendor/assets/javascripts/angular.js',
'vendor/assets/javascripts/angular-mocks.js',
'vendor/assets/javascripts/angular-resource.js',
'app/assets/javascripts/*.js.coffee',
'spec/javascripts/*_spec.js'
];
preprocessors = {
'**/*.coffee': 'coffee'
};
Я добавил AngularJS
исходных файлов (чтобы модуль и инжект работали), мои ресурсы javascript (в CoffeScript
) и мои спецификации. Я также добавил CoffeScript
в качестве препроцессора.
Мой файл спецификации:
describe("PasswordResetsController", function() {
//Mocks
var http = {};
var routeParams = {};
//Controller
var ctrl = null;
//Scope
var $scope = null;
beforeEach( function() {
angular.module('KarmaTracker');
});
/* IMPORTANT!
* this is where we're setting up the $scope and
* calling the controller function on it, injecting
* all the important bits, like our mockService */
beforeEach(angular.inject(function($rootScope, $httpBackend, $controller) {
//create a scope object for us to use.
$scope = $rootScope.$new();
//http mock from Angular
http = $httpBackend;
//now run that scope through the controller function,
//injecting any services or other injectables we need.
ctrl = $controller(PasswordResetsController, {
$scope: $scope,
$http: http,
$routeParams: routeParams
});
}));
it("foo spec", function() {
expect($scope.foo).toEqual('test');
});
});
Я загружаю модуль с помощью angular.module, внедряю зависимости и издеваюсь над $http и routeParams.
Мое определение модуля выглядит так:
window.KarmaTracker = angular.module('KarmaTracker', ['ngCookies', 'ngMobile'])
# Flashe message passed from other controllers to FlashesController
KarmaTracker.factory "FlashMessage", ->
{ string: "", type: null }
KarmaTracker.controller "RootController", ($scope, $http, $location, $cookies, $routeParams, FlashMessage, broadcastService) ->
.....
Модуль загружается в пространство имён KarmaTracker, подозреваю, что это и есть виновник. При запуске Кармы с:
karma start --log-level debug config/karma.conf.js
Я вижу, что ресурсы скомпилированы и размещены на сервере, но получаю сообщение:
PhantomJS 1.8 (Linux) ERROR
ReferenceError: Can't find variable: KarmaTracker
at /home/.../KarmaTracker/app/assets/javascripts/account.js.coffee-compiled.js:1
Любые идеи, что делать сейчас, будут высоко оценены!