Пытаясь вызвать частное свойство внутри объекта полезной нагрузки, используя машинопись
Я пытаюсь использовать несколько маршрутов API внутри автоматизированного интерфейса для создания данных с использованием serenity-js
но я думаю, что проблема, с которой я сталкиваюсь, связана с логикой машинописи, а не с инфраструктурой serenity-js...
Вот мой рабочий процесс:
аутентифицировать пользователя, используя имя пользователя и пароль, сохранить токен в частной собственности
создайте учетную запись, используя токен в заголовке, используя объект полезной нагрузки, храните идентификатор, который создается внутри частного свойства
создайте документ с помощью токена в заголовке, используя объект полезной нагрузки, но передав идентификатор из созданной учетной записи выше в одном из свойств полезной нагрузки
данные вставляются в базу данных, но мое свойство ID указано как неопределенная строка, в журналах консоли ниже четко отображается мой идентификатор, но я не могу понять, почему он не помещает этот идентификатор в свойство полезной нагрузки
вот мой код:
export class HitThatApi extends CallAnApi {
private token: string;
private TID: string;
private CID: string[] = [];
private CDOCID: string[] = [];
private CTNAME: string;
private lastResponse;
constructor(private axiosInstance: AxiosInstance) {
super(axiosInstance);
}
static as(actor: UsesAbilities): HitThatApi {
return actor.abilityTo(HitThatApi);
}
static at(baseURL: string): HitThatApi {
const axiosInstance: AxiosInstance = axios.create({
baseURL,
timeout: 2000,
headers: {Accept: 'application/json,application/xml'},
});
return new HitThatApi(axiosInstance);
get(url: string, config?: AxiosRequestConfig): PromiseLike<AxiosResponse> {
return this.axiosInstance.get(url, config).then(
fulfilled => this.lastResponse = fulfilled,
rejected => this.lastResponse = rejected.response,
);
}
authenticateWith(uname: string, upassword: string) {
const data = {email: uemail, password: upassword};
return this.post(`.........../login`, data).then(res => {
this.token = res.data.accessToken;
let TID;
for (let i = 0; i < res.data.Ts.length; i++) {
if (res.data.Ts[i].TNAME === 'MY TEST') {
TID = res.data.Ts[i].TID;
}
}
this.TID = TID;
});
}
createAccountWith(accountData: object) {
const data = accountData;
const url = `....../test/${this.TID}/accounts`;
return this.post(url, data).then(res => {
this.CID.push(res.data.MyId);
console.log('THIS IS createAccountWith method MyId----------------------', this.CID );
console.log('THIS IS createAccountWith method STATUS ----------------------', res.status );
});
}
createDocumentWith(documentData: object) {
const data = documentData;
const url = `............/Ts/${this.TID}/documents`;
return this.post(url, data).then(res => {
this.CDOCID.push(res.data.docId);
console.log('THIS IS createDocumentWith method DATA----------------------', data);
console.log('THIS IS createDocumentWith method URL----------------------', url);
console.log('THIS IS createDocumentWith method docId----------------------', this.CDOCID );
console.log('THIS IS createDocumentWith method STATUS ----------------------', res.status );
});
}
createMultipleAccountsWith(multipleAccountDatas: any[]): PromiseLike<void> {
const multipleResults = [];
multipleAccountDatas.forEach((singleAccData) => {
const singleAccountDataObj = {
test1: singleAccData[0],
test2: 'test',
test3: 'test23',
test4: 'test33',
test5: singleAccData[1],
test6:
[
{
test1: 'test',
test2: 'test2',
test3: 'test3',
test4: 'test4',
test5: 'test5',
test6: 'test6',
test7: 'test7',
test8: 'test8',
test9: 'test9'
}
],
};
multipleResults.push(this.createAccountWith(singleAccountDataObj));
});
return multipleResults[multipleResults.length - 1].then(() => Promise.resolve());
// return Promise.resolve();
}
createMultipleDocumentsWith(multipleDocumentDatas: any[]): PromiseLike<void> {
const multipleDocResults = [];
multipleDocumentDatas.forEach((singleDocData) => {
console.log('CID inside createMultipleDocumentsWith ------------------', this.CID);
const singleDocumentDataObj = {
test1: test2,
test2: singleDocData[1],
CID: `${this.CID[0]}`, // this is what is returning undefined
test4: `${this.TID}`,
test5: singleDocData[0],
test6: singleDocData[2],
test7: singleDocData[3],
test8: singleDocData[4],
test9: singleDocData[5],
test10: singleDocData[6],
test11: 'test22',
test12: singleDocData[7],
test13: 'test33',
test14: 'test44',
test15: 'test45',
test16: '',
test17: ''
};
multipleDocResults.push(this.createDocumentWith(singleDocumentDataObj));
});
return multipleDocResults[multipleDocResults.length - 1].then(() => Promise.resolve());
// return Promise.resolve();
}
deleteAccounts(): PromiseLike<void> {
this.CID.forEach((id) => {
const url = `/tests/${this.TID}/testing/${id}`;
this.delete(url);
});
return Promise.resolve();
}
post(url: string, data?: any, config?: AxiosRequestConfig): PromiseLike<AxiosResponse> {
if (this.token) {
return super.post(url, data, Object.assign({},
{headers: {'Auth': this.token}},
config,
));
} else {
return super.post(url, data);
}
}
delete(url: string, config?: AxiosRequestConfig): PromiseLike<AxiosResponse> {
if (this.token) {
return super.delete(url, Object.assign({},
{headers: {'Auth': this.token}},
config,
));
} else {
return super.delete(url);
}
}
}
Здесь вы можете видеть, что первые две строки:
THIS IS createAccountWith method CID---------------------- [ '123123123123' ]
THIS IS createAccountWith method STATUS ---------------------- 201
находятся вне метода созданного документа, и он успешно создал учетную запись с идентификатором, который теперь хранится, однако вы также можете увидеть:
CID inside createMultipleDocumentsWith ------------------ [] ---> this should be 123123123123
приведенный выше код теоретически должен напечатать CID (123123123123), именно здесь я теряюсь, почему его пустой массив
Вот остальные результаты теста:
THIS IS createAccountWith method CID---------------------- [ '123123123123' ]
THIS IS createAccountWith method STATUS ---------------------- 201
√ Given that I have created account data with
| Account Number | Account Name |
| test Account - 989 Number | test Account - 989 Name |
CID inside createMultipleDocumentsWith ------------------ [] ---> this should be 123123123123
THIS IS createDocumentWith method DATA----------------------
{
test1: test2,
test2: singleDocData[1],
CID: 'undefined', // this is what is returning undefined and should be 123123123123
test4: TID , //this gets populated correctly
test5: singleDocData[0],
test6: singleDocData[2],
test7: singleDocData[3],
test8: singleDocData[4],
test9: singleDocData[5],
test10: singleDocData[6],
test11: 'test22',
test12: singleDocData[7],
test13: 'test33',
test14: 'test44',
test15: 'test45',
test16: '',
test17: ''
};
Я чувствую, что проблема может быть, потому что я определяю private CID: string[] = [];
что я действительно хочу, но, похоже, не могу захватить его внутри объекта полезной нагрузки для другого вызова API Любые идеи о том, что я делаю неправильно в коде, будут оценены