2013-06-19 5 views
4

Я строю модульное тестирование с использованием кармы и мокко. Тестирование моих директив и использование 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

В соответствии с Документами $digest (http://docs.angularjs.org/api/ng. $ RootScope.Scope), это будет обрабатывать только наблюдатели и т.д. для сферы тока и его детей.

Это говорит мне, что, когда вы устанавливаете scope = $rootScope, а затем $digest вы будете обрабатывать наблюдателей и т.д. на $rootScope, я думаю, что это где обещания будут решены слишком, выпустив свои шаблоны. Когда вы делаете scope = $rootScope.$new() и звоните $digest, я ожидаю, что ничего, что должно произойти от $rootScope, не произойдет.

Так, это работает, если вы меняете scope.$digest() на $rootScope.$digest() или scope.$apply()?

+0

hmm ... интересный. Возможно, ты прав. Я должен проверить. благодаря! – Lior

+0

Не понял «$ apply» после написания ответа, поэтому я проверил код, чтобы убедиться, что он вызывает дайджест на '$ rootScope'. - Он делает, а не ток. – Andyrooger

+0

Удалось ли вам в итоге работать? – Andyrooger

Смежные вопросы