【问题标题】:Grails 2.4.4 controller test on save() return empty modelGrails 2.4.4 控制器测试 save() 返回空模型
【发布时间】: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


【解决方案1】:

由于控制器中的 HTTP 方法限制,测试失败(我相信这是正确的),即以下行:

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

在测试中设置HTTP方法,测试通过:

void testSave() {
    controller.request.method = 'POST'
    controller.save() // creates invalid person, redirects to create
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多