根据用户请求,保存操作的行为是它将重定向到从中选择创建操作的任何页面。
在这种情况下,这是引荐来源网址。
问题是,当我尝试运行geb测试来测试此功能时,重定向不会发生,并且当我查看geb测试中的requestReferer()
的值时,它是null
,而geb测试中的request
的值也是null
// Controller's save action
@Transactional
def save() {
def baseUrl = baseUrl()
params.createdBy = currentUser()
params.contactEmail = userEmail()
Item item = new Item( params )
if ( params.group) {
itemService.bindItemPropertyData( item, params )
}
if ( !item.validate() ) {
if ( item.isSpecialConstraintViolation() ) {
def duplicatedItemUrl = itemAssetService.getDuplicatedItemUrl( item.source, baseUrl )
render view: 'create', model: [ item : item,
map : getListsForView(),
duplicatedSource: duplicatedAssetUrl,
referer : params.referer,
params : params ]
} else {
render view: 'create', model: [ item: item,
map : getListsForView(),
referer : params.referer,
params : params ]
}
} else {
if ( params.referer ) {
item.save( flush: true )
redirect( uri: params.referer )
} else {
item.save( flush: true )
redirect( action: "show", id: item.id )
}
}
}
// requestReferer() method in controller
private String requestReferer() {
return request.getHeader("referer")
}
// Geb login method
def logIn() {
$("form").username = "user"
$("form").password = "password"
$("button").click()
}
// geb test in question
def "test creating an item"() {
when: "logging in and creating an item"
go '/'
logIn()
go '/item/create'
$("form").name = "Item One"
$("form").source = "Item One"
$("button").click()
then: "item was saved"
$("title").text() == "Item Index"
}
最佳答案
问题的原因在于,在测试中,没有通过单击链接来请求创建 Action ,这导致未设置请求 header 。
解决方案是在更改通过的测试后,实际单击页面上的创建链接。
关于grails - Grails 3.0.9和Geb测试空请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222608/