Пытаясь вызвать частное свойство внутри объекта полезной нагрузки, используя машинопись

Я пытаюсь использовать несколько маршрутов 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 Любые идеи о том, что я делаю неправильно в коде, будут оценены

0 ответов

Другие вопросы по тегам