Skip to content

Commit

Permalink
enhance base harness testing
Browse files Browse the repository at this point in the history
use elementPresent to check that elements exist/don't exist in test template to make sure test setup is complete;
  • Loading branch information
antonborisoff committed Feb 29, 2024
1 parent 97e52a1 commit 77aa496
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 45 deletions.
8 changes: 8 additions & 0 deletions src/app/tests/foundation/tests/test.component.harness.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,12 @@ import {

export class TestComponentHarness extends BaseHarness {
public static hostSelector = 'app-test-component'

// only required for testing base harness assertions to make sure test template is populated with expected elements;
// not needed in base harness itself;
// should not be moved to base harness;
public async elementPresent(id: string, tag: string): Promise<boolean> {
const element = await this.locatorForOptional(`${tag}${this.getIdSelector(id)}`)()
return !!element
}
}
2 changes: 1 addition & 1 deletion src/app/tests/foundation/tests/test.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ <h1 data-id="h1-element-class-visibility-hidden" class="visibilityHidden">h1 hid
<button data-id="button-element-class-visibility-hidden" class="visibilityHidden">button hidden via class visibility: hidden</button>

<h1 data-id="h1-element-text">h1 text</h1>
<h1 data-id="h4-element-text">h4 text</h1>
<h4 data-id="h4-element-text">h4 text</h4>
<p data-id="p-element-text">p text</p>
<div data-id="div-element-text">div text</div>

Expand Down
93 changes: 49 additions & 44 deletions src/app/tests/foundation/tests/test.component.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,59 +44,64 @@ describe('Base harness', () => {
})

it('buttonEnabled', async () => {
await expectAsync(baseHarness.elementPresent('enabled-button', 'button')).toBeResolvedTo(true)
await expectAsync(baseHarness.buttonEnabled('enabled-button')).toBeResolvedTo(true)

await expectAsync(baseHarness.elementPresent('disabled-button', 'button')).toBeResolvedTo(true)
await expectAsync(baseHarness.buttonEnabled('disabled-button')).toBeResolvedTo(false)

await expectAsync(baseHarness.elementPresent('non-existent-button', 'button')).toBeResolvedTo(false)
await expectAsync(baseHarness.buttonEnabled('non-existent-button')).toBeRejected()
})

it('elementVisible', async () => {
await expectAsync(baseHarness.elementVisible('h1-element-visible')).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible('h1-element-invisible-if')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('h1-element-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('h1-element-style-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('h1-element-style-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('h1-element-class-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('h1-element-class-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('h1-element-non-existent')).toBeResolvedTo(false)

await expectAsync(baseHarness.elementVisible('p-element-visible')).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible('p-element-invisible-if')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('p-element-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('p-element-style-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('p-element-style-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('p-element-class-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('p-element-class-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('p-element-non-existent')).toBeResolvedTo(false)

await expectAsync(baseHarness.elementVisible('div-element-visible')).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible('div-element-invisible-if')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('div-element-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('div-element-style-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('div-element-style-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('div-element-class-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('div-element-class-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('div-element-non-existent')).toBeResolvedTo(false)

await expectAsync(baseHarness.elementVisible('button-element-visible')).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible('button-element-invisible-if')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('button-element-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('button-element-style-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('button-element-style-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('button-element-class-display-none')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('button-element-class-visibility-hidden')).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible('button-element-non-existent')).toBeResolvedTo(false)
const tags = [
'h1',
'p',
'div',
'button'
]
for (const tag of tags) {
await expectAsync(baseHarness.elementPresent(`${tag}-element-visible`, tag)).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible(`${tag}-element-visible`)).toBeResolvedTo(true)

await expectAsync(baseHarness.elementPresent(`${tag}-element-invisible-if`, tag)).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible(`${tag}-element-invisible-if`)).toBeResolvedTo(false)

await expectAsync(baseHarness.elementPresent(`${tag}-element-hidden`, tag)).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible(`${tag}-element-hidden`)).toBeResolvedTo(false)

await expectAsync(baseHarness.elementPresent(`${tag}-element-style-display-none`, tag)).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible(`${tag}-element-style-display-none`)).toBeResolvedTo(false)

await expectAsync(baseHarness.elementPresent(`${tag}-element-style-visibility-hidden`, tag)).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible(`${tag}-element-style-visibility-hidden`)).toBeResolvedTo(false)

await expectAsync(baseHarness.elementPresent(`${tag}-element-class-display-none`, tag)).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible(`${tag}-element-class-display-none`)).toBeResolvedTo(false)

await expectAsync(baseHarness.elementPresent(`${tag}-element-class-visibility-hidden`, tag)).toBeResolvedTo(true)
await expectAsync(baseHarness.elementVisible(`${tag}-element-class-visibility-hidden`)).toBeResolvedTo(false)

await expectAsync(baseHarness.elementPresent(`${tag}-element-non-existent`, tag)).toBeResolvedTo(false)
await expectAsync(baseHarness.elementVisible(`${tag}-element-non-existent`)).toBeResolvedTo(false)
}
})

it('elementText', async () => {
await expectAsync(baseHarness.elementText('h1-element-text')).toBeResolvedTo('h1 text')
await expectAsync(baseHarness.elementText('h4-element-text')).toBeResolvedTo('h4 text')
await expectAsync(baseHarness.elementText('p-element-text')).toBeResolvedTo('p text')
await expectAsync(baseHarness.elementText('div-element-text')).toBeResolvedTo('div text')

await expectAsync(baseHarness.elementText('h1-element-text-non-existent')).toBeRejected()
await expectAsync(baseHarness.elementText('h4-element-text-non-existent')).toBeRejected()
await expectAsync(baseHarness.elementText('p-element-text-non-existent')).toBeRejected()
await expectAsync(baseHarness.elementText('div-element-text-non-existent')).toBeRejected()
const tags = [
'h1',
'h4',
'p',
'div'
]
for (const tag of tags) {
await expectAsync(baseHarness.elementPresent(`${tag}-element-text`, tag)).toBeResolvedTo(true)
await expectAsync(baseHarness.elementText(`${tag}-element-text`)).toBeResolvedTo(`${tag} text`)

await expectAsync(baseHarness.elementPresent(`${tag}-element-text-non-existent`, tag)).toBeResolvedTo(false)
await expectAsync(baseHarness.elementText(`${tag}-element-text-non-existent`)).toBeRejected()
}
})

it('elementChildCount', async () => {
Expand Down

0 comments on commit 77aa496

Please sign in to comment.