2013-06-19 63 views
4

我正在使用Karma和Mocha構建單元測試。測試我的指令,並使用html2js(它將htmls轉換爲$ templateCache中的緩存字符串)。 有趣的是,在我的測試中使用$ rootScope。$ new()時,模板html不會進入指令。下面的代碼:

it('should show a thumb name', function() { 
    inject(function($compile, $rootScope,$controller) { 

    var scope = $rootScope;//.$new() ($new not working. Why?) 
    var linkFn = $compile('<thumb></thumb>'); 
    var element = linkFn(scope); 
    scope.$digest(); // <== needed so that $templateCache will bring the html 
        //  (that html2js put in it)  
    console.log(element.html());// correctly returns thumb's directive templateUrl content 
})); 

...

然而,如果我使用範圍= $ rootScope $新的(),該element.html()將返回一個空字符串

有任何想法嗎?

千恩萬謝 利奧爾

+1

您需要提供所有的代碼。測試中其他地方是否定義了元素? thumb是一個指令嗎? – matsko

回答

2

按照文檔的$digesthttp://docs.angularjs.org/api/ng。$ rootScope.Scope),這將只處理觀察家等爲當前範圍和它的孩子。

這向我建議,當你設置scope = $rootScope然後$digest你將在$rootScope上處理觀察者等,我認爲這也是解決承諾的地方,釋放你的模板。當你做scope = $rootScope.$new()並致電$digest時,我期望$rootScope發生的任何事情都不會發生。

那麼,如果將scope.$digest()更改爲$rootScope.$digest()scope.$apply(),那麼這是否工作?

+0

嗯...有趣。你可能是對的。我必須檢查。謝謝! – Lior

+0

在編寫該答案後不確定'$ apply',所以我檢查了代碼以確保它調用'$ rootScope'上的摘要。 - 它確實,而不是現在。 – Andyrooger

+0

你是否設法讓這個工作到最後? – Andyrooger

相關問題