我在测试Grails应用程序的身份验证方面遇到了问题。浏览器似乎不接受cookie,所以我创建了一个简单的grails应用程序作为测试。
<html>
<head>
<title>Welcome to Grails</title>
</head>
<body>
<g:each in="${request.cookies}">
<h1>${it.name} = <span class="value">${it.value}</span></h1>
</g:each>
<span class="value">test test</span>
</body>
和我的Geb测试:
import spock.lang.Stepwise;
import geb.Page;
import geb.spock.GebReportingSpec
@Stepwise
class LoginSmokeTests extends GebReportingSpec {
String getBaseUrl() {
return "http://localhost:8080/test123/"
}
def "testing stuff"() {
given:
to HomePage
when:
println header
then:
at HomePage
}
}
class HomePage extends Page {
static at = { title == "Welcome to Grails" }
static content = {
header { $("span.value").first().text() }
}
}
当我通过浏览器查看时,会打印2个cookie的值。通过我的Geb测试访问它时,会选择<span class="value">test test</span>
HTML - 因为迭代中的请求中没有cookie。
我已经对如何使用Geb + cookies进行了一些搜索,但由于它是相对较新的软件,因此似乎没有太多的信息(虽然它的手册很棒)。
为每个测试方法创建一个新的浏览器实例但是,由于默认行为是跨浏览器实例重新使用默认驱动程序,因此在Spock cleanup()方法中清除驱动程序的cookie。但是,如果您的规范是逐步的(即使用@ spock.lang.Stepwise注释 - 请参阅Spock文档了解详细信息),cookie不会在cleanup()中清除,但会在cleanupSpec()中清除,这意味着浏览器状态不会在测试之间重置方法(对逐步规范有意义)。
并且,我只执行一种测试方法 - 但是没有发送cookie。有什么想法吗?
答案 0 :(得分:6)
因为这是您的第一个请求,所以浏览器不会有任何cookie,因为服务器没有发送任何cookie。
如果你做了后续请求,你应该看到cookies。