2013-07-11 3 views
3

Мое приложение, кроме jRuby/Rails, использует AngularJS, CoffeScript. Я бы хотел проверить свой javascript на Jasmine и запустить его с Karma (aka Testacular), но я получаю сообщение об ошибке, что мой Угловой модуль нигде не определен. То, что я получил: установлен Node.js и Karma, генерируется конфигурационный файл:Использование Karma-runner с AngularJS, Jasmine, CoffeScript

// 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 пространство имен, я suspec, что это преступник. При запуске карму с:

karma start --log-level debug config/karma.conf.js 

Я могу видеть, что активы были собраны и ServerD, но я получаю сообщение:

PhantomJS 1.8 (Linux) ERROR 
     ReferenceError: Can't find variable: KarmaTracker 
     at /home/.../KarmaTracker/app/assets/javascripts/account.js.coffee-compiled.js:1 

Любые идеи, что делать теперь будет высоко ценится!

ответ

0

Вместо того, чтобы загружать активы с помощью wildcats, попробовали ли вы их загрузить, указав один за другим в правильном порядке? Я знаю, что порядок имеет значение с кармой.

Смежные вопросы