尝试使用typescript调用有效负载对象内的私有属性

时间:2018-06-11 20:51:10

标签: typescript serenity-js

我试图在前端自动化中点击一些API路由来使用serenity-js创建数据,但我认为我遇到的问题是打字稿逻辑相关而不是serenity-js框架相关...

以下是我的工作流程:

使用用户名和密码验证用户身份 将令牌存储在私有属性

使用标头中的令牌创建帐户 使用有效负载对象 存储在私有属性

中创建的id

使用标头中的令牌创建文档 使用有效负载对象,但在其中一个有效负载属性

中传入上面创建的帐户的id

数据被插入到db中,但我的ID属性被声明为未定义的字符串,下面的控制台日志清楚地显示了我的id,但是无法弄清楚为什么它不会将该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

在createdocument方法之外,它成功创建了一个现在存储了Id的帐户,但您也可以看到:

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 个答案:

没有答案