Grails测试失败了

时间:2016-10-07 19:46:31

标签: grails

我是一个非常原始的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

1 个答案:

答案 0 :(得分:0)

转到PillsController.groovy文件并找到update()方法。

看看你是否有像

这样的陈述
render view:'/somethingPills/edit', ....

在单元测试中,view是指控制器呈现的gsp文件的路径。

我很确定update()方法中会有一些逻辑,如果单元测试仍然失败,您需要发布该逻辑。形成单元测试,看起来好像某些条件匹配,然后它呈现gsp模板,否则重定向。