Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

243
Vistas
Pase la variable de before() a it() en mocha

Soy muy nuevo en la automatización, estoy tratando de pasar el valor del token desde antes del block() a it() y me estoy volviendo indefinido.

Capaz de generar con éxito y guardarlo en token

 const { spec } = require('pactum'); const request = require('request'); const userConfig = require('../config/credential.json') process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; let token = ""; let authToken = ""; describe('POST /jobs', function () { before(function () { var option = { 'method': 'POST', 'url': 'https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token', 'headers': { 'Content-Type': 'application/x-www-form-urlencoded' }, form: { 'client_id': `${userConfig.client_id}`, 'grant_type': 'password', 'Password': `${userConfig.Password}`, 'UserName': `${userConfig.UserName}`, 'scope': `${userConfig.scope}`, 'client_secret': `${userConfig.client_secret}` } }; request(option, function (error, response) { if (error) throw new Error(error) const modifyResponse = JSON.parse(response.body) token = modifyResponse["access_token"] }) }) it('Create Job should return 201 status code', async () => { authToken = this.token console.log('------------>', authToken) await spec() .post('https://localhost:3000/jobs') .withHeaders('Authorization', `Bearer ${authToken}`) .withHeaders('X-Client-Id', 'AzureDataLoaderUI') .withHeaders('X-Message-Created-Ts', '2022-JUN-07 04:06') .withHeaders('X-Message-Id', '4e8fb14c-c71f-46f8-b41a-561d393037ce') .withHeaders('X-Transaction-Created-Ts', '2022-JUN-07 04:06') .withHeaders('X-Transaction-Id', 'f11c97dc-a6eb-4ff7-aff6-de47c4686941') .withHeaders('X-User-Id', 'AutoTestUser') .withHeaders('Ocp-Apim-Subscription-Key', 'a731ccf0510849c690d23bb42ecef9d3') .withHeaders('aeg-sas-key', 'b6LrYspQUAY2XnxkrDFDFDYsb8U2zqMQAzaQoZcQ=') .withJson({ "product": "IRT", "entity": "CENTRE PROVISIONING AND RECIPIENT DETAILS", "operation": "UPDATE", "jobName": "AUTOPERF02", "studyId": "AUTO02" }) .expectStatus(201); }); });
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Creo que también debe esperar la llamada request() , o quizás usar Cypress cy.request() en su lugar.

 let token = ""; let authToken = ""; describe('POST /jobs', function () { before(async function () { var option = { 'method': 'POST', 'url': 'https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token', 'headers': { 'Content-Type': 'application/x-www-form-urlencoded' }, form: { 'client_id': `${userConfig.client_id}`, 'grant_type': 'password', 'Password': `${userConfig.Password}`, 'UserName': `${userConfig.UserName}`, 'scope': `${userConfig.scope}`, 'client_secret': `${userConfig.client_secret}` } }; await request(option, function (error, response) { if (error) throw new Error(error) const modifyResponse = JSON.parse(response.body) token = modifyResponse["access_token"] }) }) it('Create Job should return 201 status code', async () => { authToken = token ...

Con cy.request , no tienes que esperar

 cy.request(option) .then(response => { // if error, it's already thrown token = response.body["access_token"] })

Uso de Mocha done() para indicar que la solicitud está completa

El async anterior solo funciona con solicitudes basadas en promesas.

Para esperar a que se complete la request(options, callback) pase la función done() de Mocha y llámela después de configurar su token.

Este es un ejemplo simple, usando un JSONPlaceholder para solicitar algunos datos

 const request = require('request'); let token; before(function (done) { request({ 'method': 'GET', 'url': 'https://jsonplaceholder.typicode.com/todos/1' }, function (error, response) { const modifyResponse = JSON.parse(response.body) token = modifyResponse.title done() // signal end of request }) }) it('sees the token', () => { expect(token).to.eq('delectus aut autem') // passes })
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar la variable de entorno Cypress.env para guardar el token y luego usarlo en cualquier lugar durante su prueba.

 const {spec} = require('pactum') const request = require('request') const userConfig = require('../config/credential.json') process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' let token = '' let authToken = '' describe('POST /jobs', function () { before(function () { var option = { method: 'POST', url: 'https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, form: { client_id: `${userConfig.client_id}`, grant_type: 'password', Password: `${userConfig.Password}`, UserName: `${userConfig.UserName}`, scope: `${userConfig.scope}`, client_secret: `${userConfig.client_secret}`, }, } request(option, function (error, response) { if (error) throw new Error(error) const modifyResponse = JSON.parse(response.body) //token = modifyResponse["access_token"] Cypress.env('token', modifyResponse['access_token']) //Set the token in env variable }) }) it('Create Job should return 201 status code', async () => { authToken = Cypress.env('token') //Get the token from env variable console.log('------------>', authToken) await spec() .post('https://localhost:3000/jobs') .withHeaders('Authorization', `Bearer ${authToken}`) .withHeaders('X-Client-Id', 'AzureDataLoaderUI') .withHeaders('X-Message-Created-Ts', '2022-JUN-07 04:06') .withHeaders('X-Message-Id', '4e8fb14c-c71f-46f8-b41a-561d393037ce') .withHeaders('X-Transaction-Created-Ts', '2022-JUN-07 04:06') .withHeaders('X-Transaction-Id', 'f11c97dc-a6eb-4ff7-aff6-de47c4686941') .withHeaders('X-User-Id', 'AutoTestUser') .withHeaders( 'Ocp-Apim-Subscription-Key', 'a731ccf0510849c690d23bb42ecef9d3' ) .withHeaders('aeg-sas-key', 'b6LrYspQUAY2XnxkrDFDFDYsb8U2zqMQAzaQoZcQ=') .withJson({ product: 'IRT', entity: 'CENTRE PROVISIONING AND RECIPIENT DETAILS', operation: 'UPDATE', jobName: 'AUTOPERF02', studyId: 'AUTO02', }) .expectStatus(201) }) })
about 4 years ago · Juan Pablo Isaza Denunciar

0

También puede usar la function() en el bloque it() y configurarla con un alias.

 let authToken = ""; describe('POST /jobs', function () { before(function () { option = {...} cy.request(option) .then(response => { token = response.body["access_token"] }) .as('token') // alias will set "this.token" }) it('Create Job should return 201 status code', async funtion() { authToken = this.token // "this" can be used here console.log('------------>', authToken)
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda