Cucumber-js: рддреНрд░реБрдЯрд┐: рдлрд╝рдВрдХреНрд╢рди рдХрдИ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдХреЙрд▓рдмреИрдХ рдФрд░ рд╡рд╛рджрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЬреБрд▓ре░ 2017  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: cucumber/cucumber-js

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░,
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдПрдкреАрдЖрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдСрде рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ
рдореЗрд░реА рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реИ:

Feature: Login
  Scenario: Login using api
    Given I login to my account with my username and password
    Then I should get an authorization token
      |username|password|
      |[email protected]|dev|

рдореЗрд░реЗ рдХрджрдо рд╣реИрдВ:

defineSupportCode(({ Given, Then, setDefaultTimeout }) => {
  const timeOut = 30000;
  const baseSteps: BaseSteps = new BaseSteps();
  setDefaultTimeout(timeOut);

  // tslint:disable-next-line:only-arrow-functions
  Given(/^I login to my account with my username and password$/, async (table: TableDefinition) => {
   const userData = table.hashes();

    const loginResponse =  await baseSteps.loginUser(userData[0].username, userData[0].password);


    console.log('Login response is ', loginResponse);
    const statusCode = 302;

    expect(await loginResponse.status).to.equal(statusCode);
  });

   Then(/^I should get an authorization token$/, async () => {
    const authorizationHeader = await baseSteps.getAuthorizationHeader();
    console.log('Auth Header', authorizationHeader);
    expect(authorizationHeader).to.not.equal(null);

    const orders = await fetch('url',
      {
        method: 'GET', headers: {
          authorization: authorizationHeader
        }
      });

    // tslint:disable-next-line:no-console
    console.log(await orders.json());
  });
});

рдФрд░ BaseSteps.ts рдореЗрдВ рдореЗрд░реЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

 async loginUser(userName: string, password: string): Promise<Response> {
    const getSignInFormResponse = await fetch(this.getInitialRequestUrl(),
      {
        method: 'GET'
      });

    const form = <some-form-data>;

    const loginResponse = await fetch(getSignInFormResponse.url,
      {
        method: 'POST',
        headers: {
          'content-type': 'application/x-www-form-urlencoded'
        },
        body: form,
        redirect: 'manual'
      });

      return loginResponse;
  }

async getAuthorizationHeader() {
    const tokenResponse = await fetch(this.getInitialRequestUrl(),
      {
        method: 'GET',
        redirect: 'manual'
      });

    const tokenInfo = qs.parse(tokenResponse.headers.get('location'));
    const authorizationHeader = `${tokenInfo.token_type} ${tokenInfo.access_token}`;

    return authorizationHeader;
  }

рдЬрдм рдореИрдВ рдЕрдкрдирд╛ рдкрд░рд┐рджреГрд╢реНрдп рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

Error: function uses multiple asynchronous interfaces: callback and promise

рдЙрд╕ рд▓рд╛рдЗрди рдкрд░ рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдЧрд┐рд╡реЗрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ

рдХреГрдкрдпрд╛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдкрдХреА Given рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ table рддрд░реНрдХ рд╣реИ рдЬрдмрдХрд┐ рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рддрд╛рд▓рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред Cucumber-js рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ callback рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рд╡рд╛рджрд╛ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХреНрд╕ рд╕рдВрдЦреНрдпрд╛ рддрд░реНрдХ рд╣реИ?

рд╕рднреА 7 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдкрдХреА Given рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ table рддрд░реНрдХ рд╣реИ рдЬрдмрдХрд┐ рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рддрд╛рд▓рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред Cucumber-js рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ callback рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рд╡рд╛рджрд╛ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХреНрд╕ рд╕рдВрдЦреНрдпрд╛ рддрд░реНрдХ рд╣реИ?

@charlierudolph рдЕрд░реЗ рджреЛрд╕реНрдд рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЖрдкрдиреЗ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдХрд┐ рдореЗрд░реА рдлреАрдЪрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯреЗрдмрд▓ рдирд╣реАрдВ рд╣реИ?

  Given I login to my account with my username and password
    Then I should get an authorization token
      |username|password|
      |[email protected]|dev|

рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдлреАрдЪрд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдЯреЗрдмрд▓ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ?
рдпрд╣рд╛рдВ рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рд▓реА https://github.com/cucumber/cucumber-js/blob/master/features/data_tables.feature

рд╣рд╛рдБ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ..
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рджред

рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдЖрдкрдХреА рдлреАрдЪрд░ рдлрд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЗ Then рд╕реНрдЯреЗрдк рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ Given рд╕реНрдЯреЗрдк рдирд╣реАрдВ рд╣реИред

рдЙрд╣ рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ.. рд╣рд╛рдБ рддреБрдо рд╕рд╣реА рд╣реЛ .. рдореИрдВрдиреЗ рдЯреЗрдмрд▓ рдХреЛ example рднреНрд░рдо рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдЕрдм рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдЧрд░ рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИ рддреЛ рдореИрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ @charlierudolph рдХреЗ рд░реВрдк рдореЗрдВ

рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реВрдВрдЧрд╛ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдП

рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kozhevnikov picture kozhevnikov  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jfstephe picture jfstephe  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Niceplace picture Niceplace  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

edwinwright picture edwinwright  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pellekrogholt picture pellekrogholt  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ