15.3 Functional Testing - Reference Documentation
Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari
Version: 3.1.1
15.3 Functional Testing
Functional tests involve making HTTP requests against the running application and verifying the resultant behaviour. The functional testing phase differs from the integration phase in that the Grails application is now listening and responding to actual HTTP requests. This is useful for end-to-end testing scenarios, such as making REST calls against a JSON API.Grails by default ships with support for writing functional tests using the Geb framework. To create a functional test you can use thecreate-functional-test
command which will create a new functional test:$ grails create-functional-test MyFunctional
MyFunctionalSpec.groovy
in the src/integration-test/groovy
directory. The test is annotated with the Integration annotation to indicate it is a integration test and extends the GebSpec
super class:@Integration class HomeSpec extends GebSpec { def setup() { } def cleanup() { } void "Test the home page renders correctly"() { when:"The home page is visited" go '/' then:"The title is correct" $('title').text() == "Welcome to Grails" } }
Integration
annotation supports an optional applicationClass
attribute which may be used to specify the application class to use for the functional test. The class must extend GrailsAutoConfiguration.@Integration(applicationClass=com.demo.Application)
class HomeSpec extends GebSpec { // ...}
applicationClass
is not specified then the test runtime environment will attempt to locate the application class dynamically which can be problematic in multiproject builds where multiple application classes may be present.