2015-05-08 58 views
0

我正在測試Angular將我的頭髮拉出來。我試圖實例化一個控制器和茉莉花抱怨$控制器不是一個函數。以下是我的測試。

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

我已經在頂級作用域中定義了$控制器,我已經注入了控制器服務並將其分配給全局變量。它怎麼不是一個功能?

+0

注入和括號之間存在空格,將其除去,同時從_ $ controller_中除去下劃線,試試 – Jax

+0

注入和括號之間的空格是拼寫錯誤。它不能解決問題。 如果我從$控制器中刪除下劃線,則會出現$ rootScope未定義的錯誤。 –

+0

這很奇怪!你可以嘗試添加一個'dump'語句來顯示'describe'MyCtrl'...'後面緊跟着'$ controller'。還要檢查你是否真的獲得了\ _ $ controller_injection(你應該)。我假設你karma.conf.js設置好angular.mocks? – ajkavanagh

回答

0

試試這個:

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

這也行不通。由於某種原因,行 myController = $ controller 在WebStorm(意外縮進)中生成語法錯誤。我遇到了某些代碼段的問題,這很奇怪。這顯然不是縮進錯誤。 編輯:我試過它與您的編輯,我仍然得到同樣的問題。 「語法錯誤」也打破了Karma。 –

+0

嘗試選擇整個文檔並將縮進轉換爲空格,這是coffeeScript的常見問題 – Jax

+0

謝謝,解決了一個問題。它使語法錯誤消失。過去幾天我一直在使用SublimeText,他們升級了我的WebStorm許可證,可能會影響製表符/空格。儘管如此,仍然有其他問題。 –

0

我一直在使用SublimeText爲通過幾天的同時我公司收購WebStorm許可證。重寫代碼從頭開始似乎已經解決了這個問題。我試圖將標籤轉換爲空格 - 解決了我遇到的一個問題,但它沒有解決$控制器錯誤,但從頭開始。

相關問題