Кипарис не видит пользовательский Cy. команды - PullRequest
1 голос
/ 10 октября 2019

Cypress не может импортировать пользовательскую команду

commands.js

Cypress.Commands.add('generateToken', ({secret}) => {
    const totp = require('totp-generator');
    const token = totp(secret); 
    });

support / index.js

import './commands'

test.spec.ts

/// <reference types="Cypress" />

context('Actions', () => {
    beforeEach(() => {})
  })
    it('Main test', () => {
        cy.generateToken('XXXX');
    })

Все время generateToken () подчеркивается в test.spec.ts и появляется ошибка:

Property 'generateToken' does not exist on type 'cy'.

index.js и commands.js не были перемещены из исходных каталогов. Файл cypress.json пуст.

Ответы [ 5 ]

1 голос
/ 10 октября 2019

Поскольку ваш sepc является файлом с машинописным шрифтом, вы добавили новое определение типов для support/index.js?

Их документация, кажется, довольно хорошо обрисовывает это здесь . Единственное, что отличается от их примера, это то, что вы ничего не возвращаете из generateToken, поэтому я не думаю, что вы можете поместить это в глобальный интерфейс Chainable.

Вы можете попробовать добавить этов файле support/index.d.ts и посмотрите, кричит ли он на вас

declare namespace Cypress {
  interface Chainable {
    generateToken({secret}: {secret: string}): void
  }
}
0 голосов
/ 10 октября 2019

Вот как я могу получить TypeScript для просмотра моих пользовательских команд:

commands.ts

declare namespace Cypress {
  interface Chainable<Subject> {
    generateToken(secret: any): Cypres.Chainable<void>;
  }
}

function generateToken(secret: any): void {
  // Generate token
}

Cypress.Commands.add('generateToken', generateToken);

test.spec.ts

cy.generateToken(secret);
0 голосов
/ 10 октября 2019

Сделайте что-то подобное в support / command.js

Cypress.Commands.add('generateToken', (secret) => {

       const totp = require('totp-generator');
       const token = totp(secret);
  };
  cy.request(options)

});

Затем в вашем коде js

    /// <reference types="Cypress" />

context('Actions', () => {
    beforeEach(() => {})
  })
    it('Main test', () => {
        const token ='XXXX'
        cy.generateToken(token);
    })

Редактировать 1

Можете ли вы добавить это и можете добавить больше итеративных ожиданий в соответствии с вашим тестом

describe('check the tokens', function() 
{
// on 30 seconds 
it('first token ',()=> {
    cy.wait(30000).then(()=>{
        const token = getToken();   // You're waiting here for 30 sec before you get token
        console.log('first token: ' + token);
    })
})
// on 60 seconds 
it('second token', ()=>{
    cy.wait(60000).then(()=>{
        const token = getToken();
        console.log('second token: '+ token);
    });
})
})

function getToken () {
    const totp = require('totp-generator');
    const token = totp('ABCD');
    return token;
  }
0 голосов
/ 10 октября 2019

Попробуйте ниже и посмотрите, работает ли он.

Cypress.Commands.add ('generateToken', {prevSubject: false}, ({secret}) => {

// Вашкод.

});

0 голосов
/ 10 октября 2019

Попробуйте позвонить Cypress.generateToken('XXXX'); Это работает?

Также попробуйте удалить ненужные скобки при добавлении команды. Попробуйте это:

Cypress.Commands.add('generateToken', secret => {
    const totp = require('totp-generator');
    const token = totp(secret); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...