2015-02-26 2 views
0

Я новичок в угловом и недавно использовал «yo angular-fullstack» для создания моей рамки. Это хорошо работает. Но сегодня я обнаружил проблему вокруг тестирования новой директивы.Угловое испытание ползучести кажется хрупким?

Когда было создано первое - все было в порядке. Затем, проанализировав файлы с помощью intellij, я обнаружил, что недавно добавленная новая строка в файле template.html привела к сбою тестирования. Это кажется очень странным ... т. Е. Если в конце файла testit.html есть дополнительная строка в новой строке, тест не должен прерываться.

Действительно ли необходимо выполнить обрезку() или некоторые из них в тесте ??? Любая помощь будет оценена по достоинству. Я новичок в угловой, но я также хочу убедиться, что у меня нет проблемы где-то еще в коде. Другие видели это? Или есть простой способ вызвать угловое высылку подробной или отладочной информации?

Вот относительная часть неисправного выхода теста ворчание:

PhantomJS 1.9.8 (Linux) Directive: testit should make hidden element visible FAILED 
Expected 'this is the testit directive 
' to be 'this is the testit directive'. 

соответствующие файлы:

testit.directive.js:

'use strict'; 

angular.module('trackerFooApp') 
    .directive('testit', function() { 
    return { 
     templateUrl: 'app/testit/testit.html', 
     restrict: 'EA', 
     link: function (scope, element, attrs) { 
     } 
    }; 
    }); 

tesit.directive.spec .js:

'use strict'; 

describe('Directive: testit', function() { 

    // load the directive's module and view 
    beforeEach(module('trackerFooApp')); 
    beforeEach(module('app/testit/testit.html')); 

    var element, scope; 

    beforeEach(inject(function ($rootScope) { 
    scope = $rootScope.$new(); 
    })); 

    it('should make hidden element visible', inject(function ($compile) { 
    element = angular.element('<testit></testit>'); 
    element = $compile(element)(scope); 
    scope.$apply(); 
    expect(element.text()).toBe('this is the testit directive'); 
    })); 
}); 

testit.html:

<div>this is the testit directive</div> 

Спасибо вам за помощь!

+0

Возможно, это не связано, но это - 'module ('app/testit/testit.html')' выглядит совершенно неправильно. У вас нет модуля под этим именем. – Phil

+0

Да - этот набор файлов находится в структуре генерации «yo angular-fullstack», которая отдельно обрабатывает клиентский и серверный разделы. Таким образом, фактическое приложение определено в другом месте, а затем инъекция «магически» захватывает эту директиву. – JoelParke

ответ

1

Сопряжение toBe() использует сравнение ===. Для строк текста в HTML, которые могут иметь или не иметь новые строки, вы, вероятно, захотите использовать toContain().

Это, если вы хотите, чтобы обеспечить точный формат, toBe() или toEqual() - это то, что вы хотите.

+0

Благодарим за предложение theContain() работает хорошо. Я также использовал toMatch() с регулярным выражением, которое гарантирует, что я полностью пойму дисперсию. – JoelParke

0

Чтобы устранить эту проблему, я изменил:

expect(element.text()).toBe('this is the testit directive'); 

->

expect(element.text().trim()).toBe('this is the testit directive'); 

, который решает вопрос ... и становится ясно, что дополнительный символ новой строки является проблемой в этом случае. Я надеюсь, что это поможет кому-то другому, кто не знаком с этим, как я :-)

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