Написание серии функциональных тестов с использованием стажера, и я пытался использовать методы до и после, чтобы очистить все файлы cookie и локально сохраненные данные, чтобы каждый тест начинался с чистого листа.
Вот функция cleanEnvironment, которую я пытаюсь использовать, расположенная в модуле с именем utils
:
cleanEnvironment: function(name) {
name = name || 'NONE';
// window params
var defaultHeight = 768;
var defaultWidth = 1024;
if (this.remote.environmentType.webStorageEnabled === true) {
this.remote
.clearSessionStorage()
.clearLocalStorage();
}
return this.remote
.setWindowSize(defaultWidth, defaultHeight)
.getCookies()
.then(
function(cookies) {
console.log('in ', name);
console.log('Existing cookies that will be cleared are ', cookies);
}
)
.clearCookies()
.then(
function(cookies) {
console.log('in ', name);
console.log('Existing cookies are ', cookies);
}
);
},
и вот как я пытаюсь вызвать его в методах до/после:
after: function() {
console.log('timestamp for login after start is ', Date.now());
utils.cleanEnvironment.call(this, 'login before');
console.log('timestamp for login after finish is ', Date.now());
},
Я наконец понял (и перечитал документы, в которых это говорится), что я не могу быть уверен в порядке до и после для нескольких наборов, потому что я не возвращаю Promise в этих модулях. Но я изо всех сил пытаюсь написать обещание, которое позволяет мне использовать этот внешний модуль utils
, поэтому я не повторяю код в каждом наборе.
Как будет выглядеть обещание в методах before
/after
, которое успешно проходит и возвращает правильную ссылку на this.remote
? Я не нахожу примеров промисов в этих методах, и до сих пор я либо получаю ошибки в функции cleanEnvironment
, где this.remote
не определено, либо браузер никогда не загружает тестовый URL-адрес, что, как я понимаю, означает, что я никогда не разрешаю обещание.
Вот одна из моих попыток:
after: function() {
var self = this;
return new Promise(function(resolve, reject) {
console.log('timestamp for login after start is ', Date.now());
utils.cleanEnvironment.call(self, 'login before');
console.log('timestamp for login after finish is ', Date.now());
resolve();
});
},
Я уверен, что совершенно упускаю из виду что-то очевидное в Promises, но после 7 часов разглядывания этого кода я ничего не понимаю.