ProtractorJS_скрипт для определения будущей даты_не верно отрабатывает в тесте

protractor
protractorjs
testing
selenium
Теги: #<Tag:0x00007fedbc573af8> #<Tag:0x00007fedbc5738f0> #<Tag:0x00007fedbc573788> #<Tag:0x00007fedbc573648>

(Алексей Щербин) #1

Всем добрый день,

Возникла проблема. Есть поле для ввода кол-ва дней. Есть поле, которое отображает будущую дату, которая равна текущей + данные с первого поля.

Написал код:

                var periodOfVacation = '28';

		//скрипт для определения будущей даты
		var dateToReturn = function() {
			var d = new Date();
			d.setDate(d.getDate() + periodOfVacation );
			var cur_date = function() {
  				if(d.getDate()<10) {
  					return '0' + d.getDate();
  				} else {
  					return d.getDate();
  				};
  			};
  			var cur_month = function() {
  				if((d.getMonth() + 1)<10) {
  					return '0' + (d.getMonth() + 1);
  				} else {
  					return d.getMonth() + 1;
  				};
  			};
  			var cur_year = d.getFullYear();
  			return cur_date() + '.' + cur_month() + '.' + cur_year;  
		};

		//конец скрипта
		expect(formStepOne_page.fieldDateForReturn().getText()).toBe(dateToReturn());

Скрипт написан верно. Проверил в консоли браузера. Выводит на текущий момент 07.06.2017. Тест же у меня падает потому, что скрипт вычисляет как-то иначе и в итоге выводится:
Expected '07.06.2017' to be '22.02.2020'.

Кто с таким сталкивался? Помогите новичку, пожалуйста.


(Алексей Щербин) #2

Проблему нашел. Точнее не нашел, а поборол. Скрипт по всей видимости от куда-то тянет еще данные в тесте (разбираться нет времени). Если вместо переменной periodOfVacation вставить просто число 28, то скрипт в тесте отработает корректно. Это конечно не решение, так как скрипт не вынесен вверх, а находится по ходу дела в шаге самого теста.


(Valentin Buryakov) #3

Для работы с датами очень советую использовать бибилиотеку moment.js, она как раз и позволяет быстро и легко работать с датами, форматировать, выполнять различные операции по добавлению и вычислению дат. Значительно упрощает жизнь + хорошая документация с кучей примеров.


(Алексей Щербин) #4

Да, Вы правы. Лучше такой код, чем то полотно, что я сделал. Благодарю! Попробую его применить.

moment().add(10, ‘days’).calendar();

Вот только я не пойму, почему он не работает, пишет Failed: moment is not defined
Скачал и подключил вроде правильно:

var moment = require('moment');
var periodOfVacation = '28';
var dateToReturn = function() {
  			return moment().add(periodOfVacation, 'days').calendar();
		};

(Valentin Buryakov) #5

Проверьте, что вы сделали npm install moment --save-dev.
И лучше использовать так moment().add(periodOfVacation, 'days').format('DD.MM.YYYY'), ведь для теста вам нужна строка именно в таком формате