我是一个非常原始的Grails newb但我知道一些Groovy并且我有Java背景。这是一个古老的测试应用程序,我从Java 6更新到Java 8.
上下文:Grails 2.3.9 / Java 1.8.0_101 失败的测试是:
@TestFor(PillsController)
@Mock(Pills)
class PillsControllerTests {
...
void testUpdate() {
controller.update()
assert flash.message != null
assert response.redirectedUrl == '/somethingPills/list'
response.reset()
populateValidParams(params)
def somethingPills = new SomethingPills(params)
assert somethingPills.save() != null
params.id = somethingPills.id
controller.update()
assert view == "/somethingPills/edit" //<--- FAILS HERE. VIEW IS NULL.
assert model.somethingPillsInstance != null
somethingPills.clearErrors()
populateValidParams(params)
controller.update()
assert response.redirectedUrl == "/somethingPills/show/$somethingPills.id"
assert flash.message != null
response.reset()
somethingPills.clearErrors()
populateValidParams(params)
params.id = somethingPills.id
params.version = -1
controller.update()
assert view == "/somethingPills/edit"
assert model.somethingPillsInstance != null
assert model.somethingPillsInstance.errors.getFieldError('version')
assert flash.message != null
}
}
我认为&#34;查看&#34;是对模型/视图/控制器的某些编码变体的引用。
我发现顶部的更新令人困惑。更新如果没有保存的内容?我尝试将populate和SomethingPills声明移到上面更新。结果是该视图仍为空。我怎样才能预测会出现什么样的观点?
我注意到的另一件事。如果我点击更新方法,我看到有两个参数。我假设Groovy允许你默认不传递任何参数,或者我会看到有关它的错误。我不知道这是不是应该如何工作,但如果我拉出ID&amp;来自SomethingPills的版本并传递它们然后我得到/ somethingPills / show / 1&#34;而不是null但仍然没有&#34; / somethingPills / edit&#34;。
[编辑]我发现了这个:http://docs.grails.org/2.3.9/guide/scaffolding.html
答案 0 :(得分:0)
转到PillsController.groovy文件并找到update()方法。
看看你是否有像
这样的陈述render view:'/somethingPills/edit', ....
在单元测试中,view是指控制器呈现的gsp文件的路径。
我很确定update()方法中会有一些逻辑,如果单元测试仍然失败,您需要发布该逻辑。形成单元测试,看起来好像某些条件匹配,然后它呈现gsp模板,否则重定向。