【问题标题】:ngMock is throwing template load error because of ngRoute's $routeProvider...?由于 ngRoute 的 $routeProvider...,ngMock 抛出模板加载错误...?
【发布时间】:2014-11-04 20:07:03
【问题描述】:

我刚刚将 ngMock 包含到我的项目中,因为我需要它用于 $httpBackend。我有一堆业力/茉莉花测试设置,在包括 ngMock 之后,一切都因为它导致的错误而中断:

PhantomJS 1.9.7 (Windows 7): Executed 0 of 41 SUCCESS (0 secs / 0 secs)
PhantomJS 1.9.7 (Windows 7) ERROR
  Error: Unexpected request: GET home/home.html
  No more request expected
  at C:/dev/app/bower_components/angular-mocks/angular-mocks.js:1181

好像不喜欢ngRoute/$routeProvider。具体来说,它打破了 else/redirectTo 语句。如果我注释掉该部分,业力/茉莉花测试不会出错。

  $routeProvider
    .when('/home', angularAMD.route({
      templateUrl: 'home/home.html',
      controller: ''
    }))
    .otherwise({
      redirectTo: '/home'
    });

注意,我正在使用 angularAMD(用于延迟加载),但即使我重写该部分以仅使用 {} 而不使用 angularAMD.route(),它仍然会引发相同的错误。即:

  $routeProvider
    .when('/home', {
      templateUrl: 'home/home.html',
      controller: ''
    })
    .otherwise({
      redirectTo: '/home'
    });

知道为什么 ngMock 不喜欢 ngRoute 吗?现在,我创建了一个解决方法,在运行 karma/jasmine 测试时跳过 $routeProvider 部分。但我试图了解发生了什么,我不应该在单元测试期间设置 $routeProvider 吗(这是不好的做法)?

[编辑:] 问题似乎也出现在其他部分。我正在运行一个测试,其中包含一个正在加载模板的服务,它还会引发错误:

Error: Unexpected request: GET components/modal/modal.html
No more request expected
    at $httpBackend (C:/dev/app/bower_components/angular-mocks/angular-mocks.js:1181)

[Edit:] 调用$httpBackend.flush();时似乎会抛出错误

[编辑:] 很好,找到了与问题相关的帖子。不敢相信谷歌在我搜索时没有显示任何相关结果。 解决方案:如果您是从 Google 搜索结果中找到自己的,请查看以下内容:post 1post 2

[编辑:] 无法让任何这些解决方案与 angularAMD 一起使用。有什么建议吗?

【问题讨论】:

  • 您找到解决方案了吗?遇到完全相同的问题!
  • @stianlip 是的,你需要设置一个包罗万象的方法来汇集所有未解析的模板:$httpBackend.whenGET(/\.html$/g).respond(""); 在我的测试中,我使用单独的app.js 文件来引导应用程序,它不会t 声明任何 $routeProvider 配置。

标签: angularjs jasmine karma-jasmine ngroute angular-amd


【解决方案1】:

我的问题是我没有加载应用程序的完整模块(这是我与 ngRoute 相关联的模块)。

在我的User.tests.js 文件中,我有

 beforeEach(module('App.services'));

在我的app.js 文件中:

  App = angular.module("App", [
    "ngRoute"
    "App.templates"
    "App.filters"
    "App.services"
    "App.controllers"
    "App.directives"
    "ui.bootstrap"
  ]);

在我的User.js 服务中,我实际上使用了$route解决方案 对我来说 是切换我的User.tests.js 以使用模拟模块"App" - beforeEach(module("App"));这样测试就加载了所有正确的依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多