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 + Cookieの使い方を調べてみましたが、比較的新しいソフトウェアなので、あまり多くの情報がないようです(マニュアルはすばらしいですが)。
テストメソッドごとに新しいブラウザインスタンスが作成されます。ただし、デフォルトの動作では、ブラウザインスタンス全体でデフォルトのドライバを再利用するため、Spock cleanup()メソッドでドライバのCookieがクリアされます。ただし、仕様が段階的である場合(つまり、@ spock.lang.Stepwiseで注釈が付けられている場合-詳細についてはSpockドキュメントを参照)、Cookieはcleanup()でクリアされませんが、cleanupSpec()でクリアされます。これは、テスト間でブラウザーの状態がリセットされないことを意味します。メソッド(段階的な仕様には意味があります)。
そして、私は1つのテストメソッドのみを実行していますが、Cookieは送信されません。何か案は?