使用角度种子项目无法运行单元测试

时间:2014-01-22 02:15:36

标签: javascript angularjs unit-testing twitter-bootstrap jasmine

更新

我正在通过业力模块寻找代表chrome并尝试切换到firefox失败的代码,如果有人知道我应该在哪里看,我也会非常开心。


我希望有人熟悉有角的种子。我写了一个小角度js网络应用程序,我想为它写一些测试,所以我今天学习茉莉和业力。我发现有角度的种子安装了这些库,我花了一天时间将我的项目移动到有角度的种子。

我在运行单元测试时遇到问题,我收到错误

Chrome 32.0.1700 (Mac OS X 10.8.4) ERROR
    Uncaught Error: Bootstrap requires jQuery

有趣的是,当我启动服务器时,在chrome dev控制台中,jquery文件实际上已正确加载到我的网络上,我确保它们来自bootstrap.min.js

在我的index.html文件中,我在底部有

这些脚本
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>       
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="js/vendor/bootstrap.min.js"></script>

在身体结束之前

该网站已启动并正在运行,Chrome开发者控制台上没有任何错误。

angular seed附带了一个package.json文件(我想运行npm install来安装angular种子目录中的模块)

我包含了jquery并且无论如何都安装了jquery模块,这是我的第二次尝试。

"jquery" : "~2.1.0-rc1"

我甚至下载了jquery未压缩文件,并从我的js / vendor文件夹中链接到我的index.html。我已经取消了它。这些文件仍然存在于我的js / vendor文件夹中。

我在运行此

后收到上述错误
scripts/test.sh

这可能是一个问题,我不太确定。我会看看我是否可以切换到使用firefox进行测试。任何有关解决此问题的帮助或想法表示赞赏。

如果它有帮助,这是我的controllersSpec.js文件

'use strict';

/* jasmine specs for controllers go here */

describe('RootPage', function(){
  var rootCtrl; 
  beforeEach(module("backpageApp"))
  beforeEach(inject(function ($controller) {
    rootCtrl = $controller("RootCtrl"); 
  }))

  describe("RootCtrl", function() {
    it("should have listings", function() {
        expect(rootCtrl.listings).toBe(true)
    })
  })
})

2 个答案:

答案 0 :(得分:1)

您需要在karma配置文件中列出测试依赖项。如果你看一下/scripts/test.sh的内容,你可以看到它所做的就是这个......

$BASE_DIR/../node_modules/karma/bin/karma start $BASE_DIR/../config/karma.conf.js $*

..所以它调用karma启动脚本并将其传递给karma.conf.js。打开karma.conf.js文件,您可以看到角度种子项目附带的依赖项。 jQuery不存在,因为Angular不需要它,但是你的应用程序需要它。你应该在那里添加你的bootstrap.js文件......

 files : [
  'app/lib/angular/angular.js',
  'app/lib/angular/angular-*.js',
  'test/lib/angular/angular-mocks.js',
  'app/js/**/*.js',
  'test/unit/**/*.js'
],

我会下载jquery文件,因此您可以指向本地副本。例如......

 files : [
  'app/lib/jquery/jquery.js',
  'js/vendor/bootstrap.min.js',
  'app/lib/angular/angular.js',
  'app/lib/angular/angular-*.js',
  'test/lib/angular/angular-mocks.js',
  'app/js/**/*.js',
  'test/unit/**/*.js'
],

答案 1 :(得分:0)

我不确定您是否已遵循所有步骤,但无论如何这些都是运行Angular-Karma-Jasmine的步骤:

  1. 您需要安装nodejs,karma在节点上运行

  2. 您需要从命令窗口安装来自Node Packaged Modules的业力执行:

    npm install -g karma

  3. 如果您打算使用Chrome和Firefox运行此功能,并且您在Windows上运行此功能,则需要添加2 environment variables

  4.    CHROME_BIN = [Crome installation path/chrome.exe]
       FIREFOX_BIN =[Firefox installation path/firefox.exe]
    

    4.执行后,使用命令窗口返回项目文件夹:

    karma init

    只需按Enter键直到完成;底线,这将创建一个名为:

    karma.config.js

    的文件

    在我的项目中,这个文件看起来像这样,你的文件可能会包含一些有关不同设置的有用评论:

        module.exports = function(config) {
          config.set({    
            basePath: '',    
            frameworks: ['jasmine'],    
            files: [
              '../app/*.js',
              '../app/lib/angular.js',
              '../app/lib/angular-route.min.js',
              '../app/lib/angular-mocks.js',         
              '../app/app.js',
              'controllers/*.js',
              'services/*.js',
            ],    
            exclude: [
            ],    
            reporters: ['progress'],    
            port: 9876,    
            colors: true,    
            logLevel: config.LOG_INFO,    
            autoWatch: true,    
            browsers: ['Chrome','Firefox'],
            captureTimeout: 60000,
            singleRun: false
          });
        };
    

    重要提示:请确保在配置中包含角度模拟,inject功能在该模块上。

    5.返回到您的命令窗口,浏览karma.config.js文件所在的位置并执行:

    karma start

    警告: 2014年1月21日之前下载的Karma版本使用jasmine 1.3.1如果您在项目中包含更新版本的jasmine(可能是2.0.0),您可能会发现{{3}在那个版本和karma-jasmine使用的版本之间。

    此时你会很高兴。

    关于从SpecRunner文件中运行jasmine可能存在一些差异,但我想这可能是另一个问题的主题。