Добавление пользовательской команды, которая возвращает строку, машинопись - PullRequest
1 голос
/ 16 октября 2019

Я новичок в Cypress и пытаюсь изучить кипарис с помощью машинописи.

При попытке добавить пользовательскую команду я сталкиваюсь с проблемой.

Cypress.Commands.add('getEnvURL', (environment) => {

    if(environment === ('Dev')){

        return 'testURL';
    } else if (environment === ('Stagging')){        
        return 'StaggingURL';
    }
});


declare global {
    namespace Cypress {
      // tslint:disable-next-line:interface-name
      interface Chainable<Subject> {
        getEnvURL(environment: string): string;        
      }
    }
  }

SPEC FILE

it('Login Test', () => {
cy.visit(cy.getEnvURL(Cypress.env('environment')));
 });

когда я пытаюсь вызвать пользовательский метод getEnvURL () из spec-файла, я ожидаю, что он вернет строку URL. когда я запускаю тест, он ничего не делает.

Может кто-нибудь помочь мне решить эту проблему

Ответы [ 2 ]

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

Говоря о командах cy или пользовательских, они всегда возвращают результаты асинхронно. Вы используете только фактические данные результата в блоке , а затем . https://docs.cypress.io/guides/core-concepts/introduction-to-cypress.html#Subject-Management


На мой взгляд, команда cy - это не то, что вам нужно. Я ожидаю, что переменная environment установлена ​​до запуска вашего приложения и не будет изменена во время выполнения. Если это так, вам нужно всего лишь создать простой модуль, test-utils.ts или что-либо еще, помещенный в cypress / utils .

export const getEnvUrl = (env: string) => {
  const env = Cypress.env('environment')
  if (env === 'staging') {
    return 'staging-url'
  } else {
    return 'test-url'
  }
}

В кипарисетест, вы можете использовать его прямо сейчас

cy.visit(getEnvUrl())
1 голос
/ 17 октября 2019

Проблема должна быть в строке вашего кода.

cy.visit(cy.getEnvURL(Cypress.env('environment')))

cy.getEnvURL возвращает объект, а не возвращаемые значения 'testURL' или 'StaggingURL'.

Вы можете попробовать этот код вместо этого?

cy.getEnvURL(Cypress.env('username')).then(($url) => {
        cy.visit($url)
    })
...