Внутреннее функциональное тестирование и очистка файлов cookie до и после

Написание серии функциональных тестов с использованием стажера, и я пытался использовать методы до и после, чтобы очистить все файлы 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 часов разглядывания этого кода я ничего не понимаю.


person scottplumlee    schedule 10.03.2016    source источник


Ответы (1)


Команда похожа на обещание и может использоваться для асинхронных операций, поэтому вы можете просто вернуть результат своей функции cleanEnvironment в методе after.

after: function () {
    return utils.cleanEnvironment(...)
}

Вы также должны позаботиться о том, чтобы поддерживать единую цепочку в cleanEnvironment. В исходном cleanEnvironment могут быть запущены две отдельные цепочки, и возвращается только вторая. Если по какой-то причине первое выполнялось дольше, чем второе, Стажер не стал бы дожидаться его завершения. Чтобы цепочка оставалась непрерывной, сделайте что-то вроде:

var chain = this.remote;

if (this.remote.environmentType.webStorageEnabled === true) {
    chain = this.remote
        .clearSessionStorage()
        .clearLocalStorage();
}

return chain
    .setWindowSize(defaultWidth, defaultHeight)
    .getCookies()
    // ...
person jason0x43    schedule 19.04.2016