0

Im losing it, I feel like im doing this right BUT cant figure out why this simple test fails

I got a feature file like so

  Scenario: List all accounts in the tenant
    Given that Keith has navigated to the tenant account list
    When he views the accounts in the table that include name, name, name
    Then he should also see 1,2,3 in the list

I got a definition file like so

  this.When(/^(.*?) views the accounts in the table that include (.*)$/, (name: string, accountInformation: string) => {
    return stage.theActorCalled(name).attemptsTo(
      ViewAllAccountNames.inTheTableOf(listOf(accountInformation)),
    );
  });

I got a pageObject file like so

export class AccountTable {
    // static displayingAll = Text.ofAll(AccountListUI.accountListView);
  // static isDisplayingAllNames = Text.ofAll(Target.the('account names in the table').located(by.css('table tbody tr td:nth-child(2)')));

  static AccountNames = Target.the('account names in the table').located(by.css('table tbody tr td:nth-child(2)'));
  static AccountNumbers = Target.the('account numbers in the table').located(by.css('table tbody tr td:nth-child(1)'));
  static isDisplayingAllNames = Text.ofAll(AccountTable.AccountNames);
  static isDisplayingAllNumbers = Text.ofAll(AccountTable.AccountNumbers);
}

here is my class that does the work

constructor(private accName: string[]) {

  }

  static inTheTableOf(accName: string) {
    return new ViewAllAccountNames(accName);
  }

  performAs(actor: PerformsTasks): PromiseLike<void> {
    return actor.attemptsTo(
      See.if(AccountTable.isDisplayingAllNames, items => expect(items).to.eventually.contain(this.accName))
    );
  }
}

when i debug through webstorm inside class ViewAllAccountNames i get

  static inTheTableOf(accName: string) { accName: Array(3)
    return new ViewAllAccountNames(accName); accName: Array(3)
  }

then when i get to my See.if function I get

performAs(actor: PerformsTasks): PromiseLike<void> {
    return actor.attemptsTo(
      See.if(AccountTable.isDisplayingAllNames, items => expect(items).to.eventually.contain(this.accName)) AccountTable.isDisplayingAllNames: undefined
    );
  }

so my dilemma is this: and I think it stems to my See.if function isnt setup in the correct way?

See.if(AccountTable.isDisplayingAllNames, items => expect(items).to.eventually.contain(this.accName))


Cucumber test run has failed.

1) Scenario: List all accounts in the tenant - e2e\features\get_account_list\get_all_accounts.feature:10
   Step: When he views the accounts in the table that include name, name, name - e2e\features\get_account_list\get_all_accounts.feature:12
   Step Definition: node_modules\serenity-js\src\serenity-cucumber\webdriver_synchroniser.ts:47
   Message:
     AssertionError: expected [ Array(5) ] to include [ 'name', 'name', 'name' ]
     From: Task: <anonymous>
kapperkp
  • 199
  • 1
  • 3
  • 14

1 Answers1

0

i am an idiot, I was using the wrong function, had to use the function

.to.eventually.contain.members

similar answer and description found here: Answer

kapperkp
  • 199
  • 1
  • 3
  • 14