Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $controller不是Angular/Jasmine中的函数_Javascript_Angularjs_Unit Testing_Jasmine_Karma Jasmine - Fatal编程技术网

Javascript $controller不是Angular/Jasmine中的函数

Javascript $controller不是Angular/Jasmine中的函数,javascript,angularjs,unit-testing,jasmine,karma-jasmine,Javascript,Angularjs,Unit Testing,Jasmine,Karma Jasmine,我用测试仪把头发拔出来。我试图实例化一个控制器,jasmine抱怨$controller不是一个函数。下面是我的测试 describe "MyCtrl test", () -> beforeEach module('ngRoute') beforeEach module('myControllers') $controller = undefined $scope = undefined $routeParams = undefined mySvc = undef

我用测试仪把头发拔出来。我试图实例化一个控制器,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,注入了controller服务并将其分配给全局变量。它怎么不是一个函数呢?

试试这个:

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()

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

inject和括号之间有空格,请删除它,同时删除$controller中的下划线,再试一次inject和括号之间的空格是一个打字错误。这并不能解决问题。如果我从$controller中删除下划线,我会得到一个错误,$rootScope没有定义。这很奇怪!您可以尝试添加一个
dump
语句来显示
$controller
紧跟在
描述“MyCtrl”…
之后的内容吗。还要检查你是否真的注射了u$controller(你应该注射)。我假设你的karma.conf.js设置好了angular.mock?是的。我仍然习惯于测试Angular(这是gotchas的一个雷区),但我相当肯定我以前使用过这个模式,而且它很有效。转储$controller不会输出任何东西。我不知道发生了什么,但我尝试从头开始重写我的代码-和以前完全一样-并且成功了。我的档案里一定有一些奇怪的人物或小精灵之类的东西。这很令人沮丧。这也不起作用。出于某种原因,行myController=$controller在WebStorm中生成语法错误(意外缩进)。我对某些代码有这个问题,这很奇怪。这显然不是压痕错误。编辑:我试过你的编辑,我仍然得到同样的问题。“语法错误”也打破了因果报应。尝试选择整个文档并将缩进转换为空格,这是CoffeeScriptThank的一个常见问题,解决了一个问题。它消除了语法错误。过去几天,当他们升级我的WebStorm许可证时,我一直在使用SublimiteText,这可能会影响选项卡/空间。不过还有其他问题。