Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Как протестировать фильтр, объявленный в шаблоне? (https://javascript.ru/forum/angular/46693-kak-protestirovat-filtr-obyavlennyjj-v-shablone.html)

Shitbox2 19.04.2014 18:07

Как протестировать фильтр, объявленный в шаблоне?
 
Нужно дописать сюда тест https://github.com/angular-translate...ec.js#L85-L129

Проверяется эта правка https://github.com/tamtakoe/angular-...25ac1174683e6b

Суть в том, что в выражении
{{STR | translate: '{val:demo.count}'}}

demo.count не вычислялась (возвращалась пустота)

После исправления стал передавать this (= scope) в фильтр и интерполяция заработала (стало возвращаться значение demo.count).


Как протестировать такую штуку?

FireVolkhov 21.04.2014 07:48

Возможно тебе поможет вот такой примерчик
describe('Test', function(){

	var $ = angular.element,
		$compile,
		$rootScope;

	beforeEach(module('pascalprecht.translate', function ($translateProvider) {
		$translateProvider
			.translations('en', {
				'TRANSLATION_ID_3': 'Lorem Ipsum {{value + value}}'
			})
			.preferredLanguage('en');
	}));
	
	beforeEach(inject(function(_$compile_, _$rootScope_){
		$compile = _$compile_;
		$rootScope = _$rootScope_;
	} ) );

	describe('custom', function(){

		var elem, $scope;

		beforeEach(function(){
			elem = $("<div>{{STR | translate: '{val:demo.count}' }}</div>");
			$scope = $rootScope.new();
			$compile(elem)($scope);
			$scope.$digest();
		});

		afterEach(function(){
		    $scope.destroy();
		});

		it('to do ...', function(){
			$scope.STR = 'TRANSLATION_ID_3';
			$scope.demo = {
				count: '3'
			};
			$scope.$digest();
			expect(elem[0].innerText).toBe('Lorem Ipsum 33');
		});
	});
});

Shitbox2 22.04.2014 10:52

Примерно так и сделал https://github.com/tamtakoe/angular-...c1a6ed8bbe7de9

Спасибо!


Часовой пояс GMT +3, время: 02:54.