【发布时间】: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