Travis测试Angularjs指令:TypeError:undefined不是一个函数(评估' $ compile(...)')

时间:2017-04-13 17:17:41

标签: angularjs karma-runner travis-ci

我试图将持续集成添加到AngularJS项目中,但某些指令测试失败。这些测试在当地做得很好。下面的错误代码类似于我得到的所有错误。

错误代码

PhantomJS 2.1.1 (Linux 0.0.0) myHead directive compiles a my-head attribute FAILED
    ....
    TypeError: undefined is not a function (evaluating '$compile('<div my-head></div>')') in /home/travis/build/../../test/unit/myHeadDirective.js (line 15)
    ....

似乎注入$ compile函数不起作用,而注入包含在测试中。

测试代码

describe('myHead directive', function () {
  var $compile, $rootScope

  beforeEach(module('myApp.templates'))
  beforeEach(module('myApp.directives'))

  beforeEach(inject(function (_$compile_, _$rootScope_) {
    $compile = _$compile_
    $rootScope = _$rootScope_
  }))

  it('compiles a my-head attribute', function () {
    var compiledElement = $compile('<div my-head></div>')($rootScope)
    $rootScope.$digest()  // Fire watchers
    expect(compiledElement.html()).toContain('tg_page_head')
  })

  it('compiles a my-head element', function () {
    var compiledElement = $compile('<my-head></my-head>')($rootScope)
    $rootScope.$digest()  // Fire watchers
    expect(compiledElement.html()).toContain('tg_page_head')
  })
})

我是使用Travis的新手,因此Travis设置设置可能就是问题所在。 (删除了一些不相关的部分)

#.travis.yml

language: node_js
sudo: false
node_js:
  - '6'

cache:
  yarn: true

env:
  global:
    - CXX=g++-4.8  # node 4 likes the G++ v4.8 compiler

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-4.8
  code_climate:
    repo_token: '......'


before_script:
  - npm install -g gulp
  - npm install -g

script:
  - gulp build
  - gulp test

那么,有没有人知道为什么没有定义$ compile函数?

1 个答案:

答案 0 :(得分:0)

问题解决了!事实证明,需要在运行测试之前生成templates.js。我通过将生成脚本添加到.travis.yml的before_script来获得$ compile函数。

所以,这是新的before_script:

before_script:
  - npm install -g gulp
  - npm install -g
  - gulp templates

script:
  - gulp test
  - gulp build