4

現在のユーザーを JSON としてレンダリングするコントローラー アクションをテストする非常に単純な単体テストがあります。ここに私のテストクラスがあります:

@TestFor(UserController)
class UserControllerSpec extends Specification {

    def setup() {
        def springSecurityService = mockFor(SpringSecurityService)
        springSecurityService.demand.getCurrentUser { -> [name: "Jim"] }
        controller.springSecurityService = springSecurityService.createMock()
    }

    def cleanup() {
    }

    void "test current"() {
        when:
        request.method = 'GET'
        controller.current()

        then:
        response.json.name == "Jim"
    }
}

これがコントローラーです(関連しないコードは省略)

def springSecurityService

static responseFormats = ['json']

static allowedMethods = [current: "GET"]

def current() {
    respond(springSecurityService.currentUser)
}

私はこのテストを単独で実行しgrails test -unit package.classており、コマンドラインを介して動作します:

|Running 1 unit test... 1 of 1
|Completed 1 unit test, 0 failed in 0m 11s
.
|Tests PASSED - view reports in ...\target\test-reports

springSecurityService.currentUserは常に null であるため、これは IntelliJ 経由では機能しません。結果の例外は次のとおりです。

org.codehaus.groovy.grails.web.converters.exceptions.ConverterException: Error parsing JSON
    at grails.converters.JSON.parse(JSON.java:292)
    at org.codehaus.groovy.grails.plugins.testing.AbstractGrailsMockHttpServletResponse.getJson(AbstractGrailsMockHttpServletResponse.groovy:97)
    at massemailsystem.UserControllerSpec.test current(UserControllerSpec.groovy:28)
Caused by: org.codehaus.groovy.grails.web.json.JSONException: Missing value. at character 0 of 
    at org.codehaus.groovy.grails.web.json.JSONTokener.syntaxError(JSONTokener.java:470)
    at org.codehaus.groovy.grails.web.json.JSONTokener.nextValue(JSONTokener.java:357)
    at grails.converters.JSON.parse(JSON.java:283)
    ... 2 more

何か案は?

4

1 に答える 1

1

このテスト ケースは、IntelliJ で grails テスト ケースとして実行する必要があります。 ここに画像の説明を入力 ここに画像の説明を入力

于 2014-12-22T22:47:43.237 に答える