假设我有登录的多个Geb/Spock测试.例如:
@Stepwise
Class AddNewPictureSpec extends GebSpec {
def "User at login page"() {
given: "User beings from login page"
to LoginPage
}
def "User gets redirected to Main page"() {
given: "User at Login page"
at LoginPage
when: "User signs in"
signIn "username", "pw"
to MainPage
then:
at MainPage
def "other test sequences follow...."() {
}
}
Run Code Online (Sandbox Code Playgroud)
另一个测试规范具有完全相同的启动顺序:
@Stepwise
Class EditPictureSpec extends GebSpec {
def "User at login page"() {
given: "User beings from login page"
to LoginPage
}
def "User gets redirected to Main page"() {
given: "User at Login page"
at LoginPage
when: "User signs in"
signIn "username", "pw"
to MainPage
then:
at MainPage
def "other test sequences follow...."() {
}
}
Run Code Online (Sandbox Code Playgroud)
如何重构/提取常见的登录"步骤",以便我没有重复的代码?还是我错误地写了我的测试?谢谢.
我认为'geb'方法是使用模块.
您可以创建如下的登录模块:
class LoginModule extends Module {
static content = {
loginForm {$("form")}
loginButton {$("input", value: "Sign in")}
}
void login(String username, String password = "Passw0rd!") {
loginForm.j_username = username
loginForm.j_password = password
loginButton.click()
}
}
Run Code Online (Sandbox Code Playgroud)
包括在你的LoginPage:
class LoginPage extends Page {
static url = "login/auth"
static at = {title == "My Grails Application"}
static content = {
loginModule { module LoginModule }
}
}
Run Code Online (Sandbox Code Playgroud)
然后在测试中,您可以引用模块的login方法:
@Stepwise
class EditPictureSpec extends GebSpec {
def setupSpec() {
to LoginPage
loginModule.login(loginUsername)
}
def "some test"() {
...
}
}
Run Code Online (Sandbox Code Playgroud)