Spock测试返回空模型

时间:2018-08-02 09:26:46

标签: grails spock

问题很奇怪,因为几乎相同的操作会返回正确的模型,不同之处在于我不是在渲染模板而是在查看视图。

首先执行 controller (控制器)操作

您可以看到,呈现的模型在这里

author model exists

def saveAjax(Author authorInstance){
    if(!authorInstance.validate()){
        respond view: 'index', authorInstance.errors
    } else {
        def author = new Author(username: authorInstance.username)
        authorService.save(author)
        render(template: 'author_row', model:[author:author]) //<--here the model is correct           
    }
}

如果我将“ 模板”与“ 视图”交换,则测试通过了

服务

Author save(Author author) {
    return author?.save(flush: true)
}

测试本身:

void "Test the saveAjax action"() {

    when:"you do not have the correct params"
        controller.saveAjax(new Author())

    then:"expect to be redirected to index"
        view == 'index'

    when:"you have the correct params"
        response.reset()
        controller.saveAjax(new Author(username: "Alice"))

    then:"expect to have model author"
        model.author //<-- here I get author = null
}

错误

author_is_null

Condition not satisfied:

model.author
|     |
|     null
[authorInstance:daily.journal.Author : (unsaved)]

我知道您可以检查呈现的模板的内容,但我明确针对该模型。有测试的机会吗?

2 个答案:

答案 0 :(得分:0)

事实证明,我遇到了Grails的约定超越配置事情。尽管该模型被命名为author,但是只能作为author Instance 进行测试。所以我将其更改为:

then:"expect to have model author"
      model.authorInstance
在规范中

并... 通过。如果有人可以向我解释原因,我仍然很高兴。

答案 1 :(得分:0)

因为您的作者尚未通过验证。如您在此处看到的:PCLStorage。 由于验证错误而未保存,您可以将服务更新为

authorInstance:daily.journal.Author : (unsaved)

接收验证异常,或者您可以打印测试中的错误。