Resident234
@Resident234
Back-End . PHP . Bitrix

Нужна помощь специалистов по QUnit.?

Суть вопроса такова.
Имеется поле ввода и список блоков
https://gyazo.com/b4a3386cb0651432dfc68e45e621b547
При вводе текста в поле и нажатии Enter в конец списка добавляется один блок.
Используется Angular.

Это код, отвечающий за добавление элемента
$scope.ngCreate = function ($event) {
				if(window.event.key == "Enter"){
					if($scope.blur!="" && $scope.blur!=undefined && mapInit==1){
						var left_elements = angular.element(document.querySelector("body"));
						var left_elementsE = left_elements.find('.js-content_left__elements');				
						var newLi = angular.element("<li>");
						var newA = angular.element("<a>");
						newA.attr("href", "#");
						var newSpan = angular.element("<span>");
						newSpan.addClass("glyphicon");
						newSpan.addClass("glyphicon-remove");
						newSpan.addClass("pull-right");
						var newNumber=$("ul").find($("li")).length;
						newSpan.attr("data-id", newNumber+1);
						newSpan.attr("ng-click", "ngDelete("+(newNumber+1)+");");
						left_elementsE.append(newLi);
						newLi.append(newA);	
						newA.append($scope.blur);
						newA.append(newSpan);
						newSpan.on("click", function (e){
							var number=e.target.getAttribute("data-id");
							DeleteElement(number);
						});
						//добавление метки на карту
						Placemark=new ymaps.Placemark(myMap.getCenter(), {
							balloonContent: $scope.blur,
							iconContent: markers.length+1
						}, {
							preset: 'islands#Icon'+ markers.length+1,
							draggable: true
						});
						Placemark.events.add('drag', function (g) {
							var e = g.get('target');
							updatePolyline(e.properties._data.iconContent, e.geometry._coordinates);
						});	
						myMap.geoObjects.add(Placemark);	
						Placemarks.push(Placemark);	
						markers.push(myMap.getCenter());
						names.push($scope.blur);
						updatePolyline(markers.length, myMap.getCenter());
						$scope.blur = '';	
					}
				};
				if((Placemarks.length == markers.length)&&(markers.length == names.length)){
					return 1;	
				}else{
					return 0;	
				}
			}


Тест для него:
var ctrl, ctrlScope, injector;

module("Testing the controller", {
    setup: function () {
        angular.module('map-app');
        injector = angular.injector(['ng', 'map-app']);
        ctrlScope = injector.get('$rootScope').$new();
        ctrl = injector.get('$controller')('ctrlMain', { $scope: ctrlScope });
        ctrlScope.model = {
			
        };
    },
    teardown: function () {

    }
});	

asyncTest("Test ngCreate", function() {
    setTimeout(function() {
        equal(true, ctrlScope.ngCreate());
        start();
    }, 8000);
});


Проблема в том, что при выполнении теста значение поля ввода пустое и не запущено событие нажатия клавиши Enter.
Мне нужно как-то скормить тесту заполненное поле ввода и нажатую клавишу, т.е. сэмулиовать действия пользователя.

Каким образом это нужно сделать ? Мне нужен хотя бы приблизительный пример теста для подобной ситуации.
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
Resident234
@Resident234 Автор вопроса
Back-End . PHP . Bitrix
Решение нашёл.
asyncTest("Test ngCreate", function() {
    setTimeout(function() {
		
		$('input[type="text"]').val("Test");
		var e = $.Event("keyup", { keyCode: 13, key: "Enter" }); 
		ctrlScope.blur="Test";
		equal(true, ctrlScope.ngCreate(e));	
		start();
    }, 20000);
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы