I am working with:
- Spock Core
- Spock Reports
- Spock Spring
- Spring MVC Testing
and I have the following code:
def "findAll() Expected"(){
given: "The URL being used is: /personas/xml/personas"
url = PersonaUrlHelper.FINDALL;
when: "When the URL is being calling with a GET"
resultActions = mockMvc.perform(get(url)).andDo(print())
then: "something..."
resultActions.andExpect(status().isOk())
.andExpect(content().contentType(RequestMappingProducesJsonUtf8.PRODUCES_JSON_UTF_8))
}
Two observations:
One: observe given: "The URL being used is: /personas/xml/personas"
where the URL/URI value has been added manually.
Two: the url
variable has been defined how an instance variable, because it is common in many test methods. Therefore def String url
My question is:
how I can display the url
variable in a Spock's label/block? how (given, then…)? It to be printed through Spock Reports and improve my testing documentation
I have read the following: Spocklight: Extra Data Variables for Unroll Description
It working around @Unroll. But I did realize all work around the where
label/block.
I already have tried something like:
given: "The URL being used is: $url"
given: "The URL being used is: ${url}"
And does not work
I want to work around with a syntax similar like the following:
def "findAll() Expected"(){
url = PersonaUrlHelper.FINDALL;
given: "The URL being used is: $url"
…. something
when: "When the URL is being calling with a GET"
So what could be the correct configuration?
Asume I do a refactor for PersonaUrlHelper.FINDALL
used in some Spring's @RequestMapping
and in this test method. I don't want update manually the text in the given
label/block
So what is the correct syntax?
Quick answer:
I guess the
where
-block approach will be the right one. Use something likeAnd remove the definition of
url
from the test. You will be able to use theurl
variable, since it is definied in thewhere
-block. And you will be able to reference it from the test description as#url
:Another more hacky way would be to print the
url
just through aprintln url
- this output is also captured afaik, but it wouldn't be as nice.Update: please take a look at the following spock console script: https://meetspock.appspot.com/script/5146767490285568 :
I tried to mock your script - without having your code.
As you can see, the content of the URL is printed out in the test name. AFAIK, it will also be reflected in the texts of the different test blocks when printed out through spock-reports.
BTW: the
[]
are important since they turn the returned string into a list with one element. Otherwise the string will be interpreted as lsit and the test will iterate through each character.Does this help?