Nightwatch. js написание утверждений с помощью клиентских команд, таких как getCookie - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь написать пользовательскую команду в Nightwatch. js, которая использует существующие клиентские команды, а затем передать ее утверждению. Тем не менее, он не передает никакого значения утверждению. Я думал, что это может быть связано с этим предложением отсюда: https://nightwatchjs.org/guide/extending-nightwatch/#writing -custom-команды

Командный модуль должен экспортировать командную функцию, которая должна вызывать по крайней мере один метод API Nightwatch (такой как .execute ()). Это связано с ограничением работы асинхронной системы очередей команд. Вы также можете заключить все в вызов .perform ().

Я попытался обернуть его в вызов perform(), как это и предполагает, но это не сработало, возможно, я сделал что-то не так. Я максимально упростил это, чтобы оно всегда передавало true утверждению.

isMyCookiePresent. js:

module.exports.command = function (callback) {
    let self = this;

    this.getCookies(function(res) {
        if (typeof callback === "function") {
            callback.call(self, true);
        }
    });

    return this;
};

myCookiePresent. js:

exports.assertion = function(msg) {
    this.formatMessage = function() {
        const message = msg || `Checking if my cookie is present`;

        return {
            message,
            args: []
        }
    };

    this.expected = function() {
        return this.negate ? `false` : `true`;
    };

    this.evaluate = function(value) {
        return value === true;
    };

    this.value = function(result = {}) {
        return result.value || false;
    };

    this.command = function(callback) {
        this.api.isMyCookiePresent(callback);
    };
};

1 Ответ

0 голосов
/ 20 апреля 2020

Проблема оказалась простым упущением с моей стороны: с большинством команд, таких как execute, Nightwatch возвращает красиво отформатированный объект, который содержит значение. Однако простая отправка литерального значения через обратный вызов не делает этого.

Поэтому лучше всего отправить объект в утверждение с полем value, например:

callback.call(self, true);

Должно стать:

const result = {
    value: true
};
callback.call(self, result);

Примечание: В некоторых случаях возможно просто указание значения в утверждении, например:

this.value = function(result = {}) {
    return result.value || false;
};

=>

this.value = function(result = {}) {
    return result || false;
};

Однако в этом случае, когда аргумент равен false, он сломает утверждение об отрицании (когда ожидает, что аргумент будет ложным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...