angularjs – 角度错误运行Karma测试:HTML5模式需要一个标签

前端之家收集整理的这篇文章主要介绍了angularjs – 角度错误运行Karma测试:HTML5模式需要一个标签前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个单页的Angular应用程序与Rails后端。我在我的index.html文件中使用一个标签,但是当我使用Karma运行我的前端单元测试,我得到这样:
$location in HTML5 mode requires a <base> tag to be present

我在主要的.js文件中这样做:

angular.module('my.module').config( function($locationProvider,$routeProvider) {
  $locationProvider.html5Mode( true );
}

所以,有没有任何方式,我可以注入一个< base>元素在karma实际呈现的页面?或者,告诉Angular / Karma在运行单元测试时忽略此错误

更新

This Google Groups threadthis GitHub issue都描述了这个问题,但是在这两种情况下,解决方案都是简单地提升Angular的版本。我做到了,我甚至可以看到在angular-mocks.js中的行,其中默认的baseHref设置…

这里是有问题的规格:

describe 'amnResource',->
  $compile = null
  $rootScope = null

  beforeEach ->
    module 'ngMock'
    module 'amn'
    module 'directive.template.cache'

    inject([ '$compile','$rootScope',($c,$r) ->
      $compile = $c
      $rootScope = $r
    ])

  it 'compiles to an article',->
    console.log $rootScope
    console.log $rootScope.foo
    $rootScope.foo =
      title: 'Foo'
      excerpt: 'foo bar qux'

    element = $compile('<amn-resource resource="foo"></amn-resource>')($rootScope)
    console.log element.html()
    console.log $rootScope.foo
    expect( element.html() ).toMatch /Foo/

Karma输出

Running "karma:unit" (karma) task
INFO [karma]: Karma v0.12.28 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 39.0.2171 (Mac OS X 10.9.5)]: Connected on socket hOvsC6ji15heHZmiHxJt with id 45528987
ERROR: 'Error: [$location:nobase] $location in HTML5 mode requires a <base> tag to be present!
http://errors.angularjs.org/1.3.5/$location/nobase
    at http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:63:12
    at $LocationProvider.$get (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:11187:15)
    at Object.invoke (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4138:17)
    at $LocationProvider.origProvider.$get (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4024:43)
    at Object.invoke (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4138:17)
    at http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:3956:37
    at getService (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4097:39)
    at Object.invoke (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4129:13)
    at http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:3956:37
    at getService (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4097:39)'
ERROR: 'Error: [$location:nobase] $location in HTML5 mode requires a <base> tag to be present!
http://errors.angularjs.org/1.3.5/$location/nobase
    at http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:63:12
    at $LocationProvider.$get (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:11187:15)
    at Object.invoke (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4138:17)
    at $LocationProvider.origProvider.$get (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4024:43)
    at Object.invoke (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4138:17)
    at http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:3956:37
    at getService (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4097:39)
    at Object.invoke (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4129:13)
    at http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:3956:37
    at getService (http://localhost:9876/base/vendor/assets/javascripts/angular/angular.js?3a16995fbea0062d6334adb9277e9776ca069fa1:4097:39)'
Chrome 39.0.2171 (Mac OS X 10.9.5) Midway: Resource performs a GET request Failed
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
LOG: Scope{$id: 2,$$childTail: null,$$childHead: null,$$prevSibling: null,$$nextSibling: null,$$watchers: null,$parent: null,$$phase: null,$root: Scope{$id: 2,$root: Scope{$id: ...,$$childTail: ...,$$childHead: ...,$$prevSibling: ...,$$nextSibling: ...,$$watchers: ...,$parent: ...,$$phase: ...,$root: ...,$$destroyed: ...,$$listeners: ...,$$listenerCount: ...,$$isolateBindings: ...,$$asyncQueue: ...,$$postDigestQueue: ...,$$applyAsyncQueue: ...},$$destroyed: false,$$listeners: Object{},$$listenerCount: Object{},$$isolateBindings: null,$$asyncQueue: [],$$postDigestQueue: [],$$applyAsyncQueue: []},$$applyAsyncQueue: []}
LOG: undefined
LOG: ''
LOG: Object{title: 'Foo',excerpt: 'foo bar qux'}
Chrome 39.0.2171 (Mac OS X 10.9.5) amnResource compiles to an article Failed
    Expected '' to match /Foo/.
    Error: Expected '' to match /Foo/.
        at Object.<anonymous> (/Users/acobster/DropBox/amn/amn-0.5/spec/javascripts/unit/directives/resource_spec.js:27:35)
Chrome 39.0.2171 (Mac OS X 10.9.5): Executed 3 of 3 (2 Failed) (5.078 secs / 5.074 secs)
您可以通过执行以下操作来禁用基本标记检查:
$locationProvider.html5Mode({
  enabled: true,requireBase: false
});

猜你在找的Angularjs相关文章