簡體   English   中英

對Serenity / JS有疑問嗎?

[英]Base questions with Serenity/JS?

我剛剛開始研究轉向Serenity / JS,並想知道是否有基本的問題/任務是最佳實踐?

我會多次檢查一個字段是否為空白或有錯誤,因此我創建了一個“基本問題”來實現這一目標:

基本問題

import { Is, See, Target, Task, Wait, Value, Attribute } from 'serenity-js/lib/screenplay-protractor';
import { equals, contains } from '../../../support/chai-wrapper';
import { blank } from '../../../data/blanks';

export class InputFieldQuestion {
    constructor(private inputField: Target) { }

    isBlank = () => Task.where(`{0} ensures the ${this.inputField} is blank`,
        Wait.until(this.inputField, Is.visible()),
        See.if(Value.of(this.inputField), equals(blank))
    )

    hasAnError = () => Task.where(`{0} ensures the ${this.inputField} has an error`,
        See.if(Attribute.of(this.inputField).called('class'), contains('ng-invalid'))
    )
}

然后,我創建特定於場景的類,但僅擴展基本問題:

import { LoginForm } from '../scenery/login_form';
import { InputFieldQuestion } from './common';

class CheckIfTheUsernameFieldQuestion extends InputFieldQuestion {
    constructor() { super(LoginForm.Username_Field) }
}

export let CheckIfTheUsernameField = new CheckIfTheUsernameFieldQuestion();

節點導出的優點使我可以導出實例化的問題類以供我使用。

我只是想知道我是在濫用Serenity / JS框架還是行嗎? 我想建立一個良好的框架,並希望確保我正在盡一切努力進行最佳實踐。 任何反饋表示贊賞!

當然,您可以這樣做,盡管我個人比較喜歡繼承而不是繼承。

據我所知,您正在設計標准化的驗證任務,您希望按以下方式使用它們:

actor.attemptsTo(
    CheckIfTheUsernameField.isBlank()
)

您可以通過稍微靈活一些的設計來實現相同的結果,在該設計中,可以使用要檢查的字段對任務進行參數設置:

actor.attemptsTo(
    EnsureBlank(LoginForm.Username_Field)
)

哪里:

const EnsureBlank = (field: Target) => Task.where(`#actor ensures that the ${field} is blank`,
    Wait.until(field, Is.visible()),
    See.if(Value.of(field), equals(blank)),
);

或者,遵循您想要的DSL:

const EnsureThat = (field: Target) => ({
    isBlank: () => Task.where(`#actor ensures that the ${field} is empty`,
        Wait.until(field, Is.visible()),
        See.if(Value.of(field), equals(blank)),
    ),
    hasError: () => Task.where(`#actor ensures that the ${field} has an error`,
       See.if(Attribute.of(this.inputField).called('class'), contains('ng-invalid')),
    ),
});

可以如下使用:

actor.attemptsTo(
    EnsureThat(LoginForm.Username_Field).isBlank()
);

希望這可以幫助!

一月

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM