angularjs - 将 Karma-runner 与 AngularJS、Jasmine、CoffeeScript 一起使用

标签 angularjs coffeescript jasmine karma-runner

除了 jRuby/Rails 之外,我的应用程序还使用 AngularJSCoffeScript。我想用 Jasmine 测试我的 javascript 并用 Karma(又名 Testacular)运行它,但我收到一条错误消息,指出我的 < strong>Angular 模块未在任何地方定义。我得到了什么:安装了 Node.jsKarma,生成了一个配置文件:

// 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 源文件(因此模块和注入(inject)将起作用)、我的 javascript Assets (在 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 加载模块,注入(inject)依赖项并模拟 $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 时:

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

我可以看到 Assets 已编译并已服务器化,但我收到一条消息:

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

任何想法现在做什么将不胜感激!

最佳答案

您是否尝试过以正确的顺序逐个指定来加载它们,而不是使用 wildcats 来加载它们?我知道顺序确实与 karma 有关。

关于angularjs - 将 Karma-runner 与 AngularJS、Jasmine、CoffeeScript 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17601744/

相关文章:

javascript - 在 angular.js 中检查服务器上是否已经存在数据

ruby-on-rails - 预编译 coffeescript 文件(Rails 4)

javascript - 如何在 Backbone 模型中放置按钮?

javascript - 使用 phantomjs headless 运行 jasmine 规范

javascript - Coverage.json 不是用 Jasmine RequireJS 和 Istanbul 生成的

javascript - 类型错误 : Cannot read property '0' of undefined. Jasmine

javascript - 使用 ContentEditable 复制和粘贴表格

javascript - Angular JS : ng-switch on boolean not working

angularjs - 页面无法正常显示

javascript - Mocha 测试与焦点相关的行为(Backbone/CoffeeScript 应用程序)