【发布时间】:2015-06-05 13:05:48
【问题描述】:
我对 PersonController 进行了测试,它只是执行了没有参数的 save(),因此创建了一个无效的人。它应该返回模型中的无效人员并显示创建视图。但是模型是空的。
测试:
import org.junit.*
import grails.test.mixin.*
@TestFor(PersonController)
@Mock(Person)
class PersonControllerTests {
...
void testSave() {
controller.save() // creates invalid person, redirects to create
assert model.personInstance != null
assert view == '/person/create'
response.reset()
populateValidParams(params)
controller.save()
assert response.redirectedUrl == '/person/show/1'
assert controller.flash.message != null
assert Person.count() == 1
}
...
}
控制器:
class PersonController {
...
def save() {
def personInstance = new Person(params)
if (!personInstance.save(flush: true)) {
render(view: "create", model: [personInstance: personInstance])
return
}
flash.message = message(code: 'default.created.message', args: [message(code: 'person.label', default: 'Person'), personInstance.id])
redirect(action: "show", id: personInstance.id)
}
...
}
输出:
junit.framework.AssertionFailedError: Assertion failed:
assert model.personInstance != null
| | |
[:] null false
at demographic.PersonControllerTests.testSave(PersonControllerTests.groovy:43)
我怎样才能得到正确的模型?
这是预期的行为还是 Grails 错误?
【问题讨论】:
-
我不确定这是你的问题,也没有看到
PersonController的完整定义,但是你有没有尝试在测试中设置controller.request.method = 'POST'(controller.save()之前)?跨度> -
我可以通过在 github 上跟踪您的代码来检查这一点 :-)
标签: unit-testing grails