Grails单元测试控制器字段

时间:2018-07-05 16:36:47

标签: unit-testing grails spock

有人可以告诉我 controller .searchService, controller .search()和 controller 中的 controller 对象是什么> .response.text.contains是指?该控制器对象是如何创建的,目的是什么?

import grails.test.mixin.TestFor
import spock.lang.Specification
@TestFor(BookController)
@Mock(Book)
class BookControllerSpec extends Specification {

    void "test search"() {
        given:
        def searchMock = mockFor(SearchService)
        searchMock.demand.searchWeb { String q -> ['first result', 'second result'] }
        searchMock.demand.static.logResults { List results ->  }
        controller.searchService = searchMock.createMock()

        when:
        controller.search()

        then:
        controller.response.text.contains "Found 2 results"
    }
}

1 个答案:

答案 0 :(得分:1)

controller是您的被测控制器的实例,在@TestFor批注中指定。在这种情况下,它是BookController。它由Grails创建,供您在单元测试中使用。

controller.searchService是BookController对SearchService bean的引用,您可以在给定的块中进行模拟。

controller.search()正在调用BookController的search操作。

controller.response.text是操作写入响应的文本输出。

Testing docs是用于基于Trait的最新版本的测试框架,但是概念仍然相同。