Cypress выполняет вызовы API вне браузера - PullRequest
2 голосов
/ 04 апреля 2019

Я создал функции с помощью axios, которые будут настраивать данные тестирования перед каждым тестом. Они находятся в файле FOY.js

const axios = require('axios');

//Get the token needed for Bearer Authorization
async function getJWT() {
    const bearerToken = await axios.post('https://www.example.com', {username: 'user', password: 'test1234'});
    return bearerToken.data.access_token
}

//Get the UserId from the email address.
async function getUserId(emailAddress) {
    var bearerToken = await getJWT();
    const userId = await axios.get('https://example.com/users/search?contains='+emailAddress+'', {'headers':{Authorization: 'Bearer '+bearerToken+''}});
    console.log(userId.data.users[0].id);
    return userId.data.users[0].id
}

//Delete a record for a user
async function TMDeleteFOY (emailAddress) {
    var bearerToken = await getJWT();
    var userId = await getUserId(emailAddress);
    const response = await axios.delete('https://example2.com/'+userId+'/record', {'headers':{Authorization: 'Bearer '+bearerToken+''}});
    return response.status
}
module.exports.TMDeleteFOY = TMDeleteFOY;
module.exports.TMUpdateFOY = TMUpdateFOY;

Использование cy.task ()

beforeEach(function() {
    cy.task('TMDeleteFOY', 'example@mail.com');
});

Плагины / index.js

const FOY = require('../resetScripts/talentMine/FOY');

module.exports = (on, config) => {
    on('task', {
        'TMDeleteFOY': (emailaddress) => {
         return FOY.TMUpdateFOY(emailaddress);
        }
    })
};

1 Ответ

1 голос
/ 04 апреля 2019

Вам нужно что-то вернуть из кода задачи, чтобы Cypress знал, чего ждать, чтобы знать, что ваша задача завершена, прежде чем запускать другой код.

Ознакомьтесь с документацией cy.task() :

В плагине task команда завершится ошибкой, если будет возвращено undefined.Это помогает отловить опечатки или случаи, когда событие задачи не обрабатывается.

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

В вашем plugins/index.js:

const FOY = require('../resetScripts/talentMine/FOY');

module.exports = (on, config) => {
    on('task', {
        'TMDeleteFOY': (emailaddress) => {
            // CHANGED: return a promise so Cypress can wait for it
            return FOY.TMDeleteFOY(emailaddress);
        }
    })
}

В вашем файле FOY.js (исключая ненужные разделы для краткости):

// start of your FOY.js...

//Delete a record for a user
async function TMDeleteFOY (emailAddress) {
    var bearerToken = await getJWT();
    var userId = await getUserId(emailAddress);
    // CHANGED: return this promise chain so Cypress can wait for it
    return await axios.delete('https://example2.com/'+userId+'/record', {'headers':{Authorization: 'Bearer '+bearerToken+''}});
}

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