2

Grails2.0.3から2.2.1にアップグレードしようとしています。私には2つの問題があります:1)単体テストが失敗していることと2)統合テストが失敗していることです。

最初の問題は、欠落しているメソッドの例外です。

| Failure:  testSendingBlankDirectionsAreOK(happytrails.RouteControllerTests)
|  java.lang.reflect.InvocationTargetException
    at happytrails.RouteControllerTests.testSendingBlankDirectionsAreOK(RouteControllerTests.groovy:163)
Caused by: org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: No signature of method: happytrails.Route.addToDirections() is applicable for argument types: (happytrails.Direction) values: [null]
Possible solutions: getDirections()

テストは次のとおりです。

void testSendingBlankDirectionsAreOK() {
    populateValidParams(params)

    params['directions[0].sortNumber'] = ''
    params['directions[0].instruction'] = ''

    def route = new Route(params)
    assert route.save() != null
    params.id = route.id

    controller.update()

    println route.errors

    assert response.redirectedUrl == "/route/show/$route.id"
    assert flash.message != null
}

2番目の問題は、GebがChromeドライバーを使用しようとしていることが原因のようです。

| Running 11 spock tests... 6 of 11
| Failure:  signup as a new user(happytrails.AuthenticatedUserSpec)
|  org.openqa.selenium.WebDriverException: Unable to either launch or connect to Chrome. Please check that ChromeDriver is up-to-date. Using Chrome binary at: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 45.66 seconds
Build info: version: '2.27.0', revision: '18259', time: '2012-12-05 11:30:53'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.2', java.version: '1.7.0_04'
Driver info: org.openqa.selenium.chrome.ChromeDriver
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:187)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:533)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:216)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:111)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:115)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:161)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:107)
    at happytrails.AuthenticatedUserSpec.signup as a new user(AuthenticatedUserSpec.groovy:25)

ChromeDriverを自動ダウンロードするように設定する方法について、このプルリクエストを見てきました。ただし、テストでは次のようにインスタンス化しています。

def "signup as a new user"() {
    given:
    def server = SimpleSmtpServer.start(1025)
    driver = new ChromeDriver()

個々のテストのためにChromeDriverをインスタンス化するためのより良い方法はありますか?

4

1 に答える 1

0

単体テストに関しては、Grails 2.2.xでは、テストに関連するすべてのドメインクラスをモックする必要があります。これについては、リリースノートで説明されています。

機能テストでは、別のドライバーを使用すると機能しますか?また、seleniumブラウザのバージョンごとに特定のバージョンが存在します。たとえば、私はFF 18.0を持ってい2.29ますが、これで動作するセレンのバージョンはであるため、クロムとセレンの互換性を確認できます。

1つのテストのみでChromeを実行している場合は-Dgeb.env=chrome、コマンドを追加してみてください。

于 2013-03-14T21:10:13.443 に答える