【问题标题】:$controller is not a function in Angular/Jasmine$controller 不是 Angular/Jasmine 中的函数
【发布时间】:2015-05-08 12:46:46
【问题描述】:

我正在测试 Angular。我正在尝试实例化一个控制器,而 jasmine 抱怨 $controller 不是一个函数。下面是我的测试。

describe "MyCtrl test", () ->
  beforeEach module('ngRoute')
  beforeEach module('myControllers')

  $controller = undefined
  $scope = undefined
  $routeParams = undefined
  mySvc = undefined

  beforeEach inject (_$controller_, $rootScope, _$routeParams_,_mySvc_) ->
    $controller = _$controller_
    $scope = $rootScope.$new()
    mySvc = _mySvc_

  describe "MyCtrl", () ->
    beforeEach () ->
      MyCtrl = $controller('MyCtrl', {$scope:$scope,$routeParams:$routeParams,mySvc:mySvc})
    it "should be defined", () ->
      expect(MyCtrl).toBeDefined()

我已经在顶级范围内定义了 $controller,我已经注入了控制器服务并将其分配给了全局变量。怎么不是函数?

【问题讨论】:

  • inject和括号之间有空格,去掉,也去掉$controller的下划线,试试看
  • inject 和括号之间的空格是错字。它不能解决问题。如果我从 $controller 中删除下划线,则会收到 $rootScope 未定义的错误。
  • 这很奇怪!你可以尝试添加一个dump 语句来显示$controller 紧跟在describe "MyCtrl"... 之后。还要检查你是否真的得到了 _$controller_ 注入(你应该这样做)。我假设你的 karma.conf.js 设置好 angular.mocks?
  • 是的。我仍然习惯于测试 Angular(这是一个陷阱的雷区),但我相当肯定我以前使用过这种模式并且它有效。转储 $controller 不会输出任何东西。
  • 我不知道发生了什么,但我尝试从头开始重写我的代码 - 就像以前一样 - 它奏效了。我的文件中一定有一些奇怪的字符或 gremlins 或其他东西。这是非常令人沮丧的。

标签: javascript angularjs unit-testing jasmine karma-jasmine


【解决方案1】:

试试这个:

describe "MyCtrl test", () ->
  beforeEach module('ngRoute')
  beforeEach module('myControllers')

  myController = undefined
  $scope = undefined
  $routeParams = undefined
  mySvc = undefined
  createCtrl = undefined

  beforeEach inject($controller, $rootScope, _$routeParams_,_mySvc_) ->
    myController = $controller
    $scope = $rootScope.$new()
    mySvc = _mySvc_
    createrCtrl = ->
      myController('MyCtrl', {$scope:$scope,$routeParams:$routeParams,mySvc:mySvc})

  it "should be defined", () ->
      createCtrl()
      expect(MyCtrl).toBeDefined()

【讨论】:

  • 这也行不通。出于某种原因,行 myController = $controller 在 WebStorm 中生成语法错误(意外缩进)。我在某些代码中遇到了这个问题,这很奇怪。这显然不是缩进错误。编辑:我已经用你的编辑试过了,我仍然遇到同样的问题。 “语法错误”也破坏了 Karma。
  • 尝试选择整个文档并将缩进转换为空格,这是 coffeeScript 的常见问题
  • 谢谢,解决了一个问题。它使语法错误消失了。过去几天我一直在使用 SublimeText,他们升级了我的 WebStorm 许可证,这可能影响了选项卡/空格。不过还有其他问题。
【解决方案2】:

这几天我一直在使用 SublimeText,而我的公司获得了 WebStorm 的许可证。从头开始重写代码似乎已经解决了这个问题。我尝试将制表符转换为空格 - 这解决了我遇到的一个问题,但它没有解决 $controller 错误,但从头开始可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多