2013-10-31 24 views
1

要熟悉指令測試,我創建了下面顯示的簡單示例。不幸的是,測試失敗了,似乎鏈接功能從未被調用。該指令在應用程序中使用時可以工作。未在測試中鏈接的角度指令

我試過硬編碼message屬性,刪除鏈接函數中的條件,甚至從$ watch中提取attr集合,但測試仍然失敗。

還有其他類似的帖子,其原因是由於缺少一個$摘要的電話,但我確實有這個,我已經嘗試將其移入it規範塊。

如果我跑console.log(elem[0].otherHTML)通話範圍結合似乎工作

<wd-alert type="notice" message="O'Doole Rulz" class="ng-scope"></wd-alert> 

我缺少什麼?

alert.spec.js

"use strict"; 

describe('Alert Specs', function() { 

    var scope, elem; 

    beforeEach(module('myapp')); 
    beforeEach(inject(function ($compile, $rootScope) { 
    scope = $rootScope; 
    scope.msg = "O'Doole Rulz"; 
    elem = angular.element('<wd-alert type="notice" message="{{msg}}"></wd-alert>'); 
    $compile(elem)(scope); 
    scope.$digest(); 
    })); 

    it('shows the message', function() { 
    expect(elem.text()).toContain("O'Doole Rulz"); 
    }); 

}); 

alert.js

angular.module('myapp').directive('wdAlert', function() { 
    return { 
    restrict: 'EA', 
    replace: true, 
    template: '<div></div>', 
    link: function(scope, element, attrs) { 
     attrs.$observe('message', function() { 
     if (attrs.message) { 
      element.text(attrs.message); 
      element.addClass(attrs.type); 
     } 
     }) 
    } 
    } 

}); 
+0

而不是'scope = $ rootScope',你試過了嗎?scope = $ rootScope。$ new()'?後者是我記得在文檔中看到的模式。 – cmw

+0

它應該只是$ rootScope的指令。我剛剛發現了這個問題,這是一個業力包含問題 - >使用'* .js'而不是'**/*。js'。對我不好。 – chris

回答

0

原來的問題是因爲我曾組織文件的方式噶配置。我會留下這個問題以防萬一它在屁股上咬人。

files: [ 
    ..., 
    'spec_path/directives/*js'  // what I originally had 
    'spec_path/directives/**/*.js' // what I needed 
] 
0

我加入這個擴大了對任何想知道的人的答案。

我通過鮑爾安裝了第三方指令。它在應用程序中工作,但導致測試中斷。

問題是Grunt/Karma不會讀取index.html中的腳本。相反,你需要確保讓業力知道每個安裝的腳本。

例如,我使用了指令ngQuickDate(日期選擇器)。我添加它的index.html的應用程序,但我需要將它添加到karma.conf.js還有:

files: [ 
    ... 
    'app/bower_components/ngQuickDate/dist/ng-quick-date.js' 
] 

答案通過**通配符來表示,根據上述法律做同樣的事情「在所有子目錄中遞歸地「。

希望有幫助!

相關問題