рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░,
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ 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
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рд╡рд╛рджрд╛ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХреНрд╕ рд╕рдВрдЦреНрдпрд╛ рддрд░реНрдХ рд╣реИ?
@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 рдХреЗ рд░реВрдк рдореЗрдВ
рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реВрдВрдЧрд╛ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдП
рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдкрдХреА
Given
рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВtable
рддрд░реНрдХ рд╣реИ рдЬрдмрдХрд┐ рдЖрдкрдХреА рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рддрд╛рд▓рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред Cucumber-js рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░callback
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рд╡рд╛рджрд╛ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рджрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХреНрд╕ рд╕рдВрдЦреНрдпрд╛ рддрд░реНрдХ рд╣реИ?