【问题标题】:how to assert values inside "render" in unit test case (grails ,junit)如何在单元测试用例(grails,junit)中断言“渲染”内的值
【发布时间】:2014-12-12 11:25:24
【问题描述】:

我试图在用 Grails 编写的单元测试用例中声明“渲染”中的值。但是好像不太合适

   render(view:"create",model[:])

我尝试的是 assertEquals("create",renderArgs("view"))

我还尝试了一些替代方案,例如 controller.response.renderedUrl 等。但这些都不起作用。 有人能给个主意吗?

提前致谢, BK

【问题讨论】:

    标签: unit-testing grails junit


    【解决方案1】:

    要测试视图,您可以简单地使用隐式 view 变量,尽管它会指向您的视图/模板的路径,例如/controller/create。所以你可以写assertEquals(view, '/controller/create')。还有一个隐含的model 变量,您可以对其进行类似处理。

    参见docs(测试视图渲染部分)。

    【讨论】:

      【解决方案2】:

      以下测试有效:

      grails-app/controllers/demo/DemoController.groovy:

      package demo
      
      class DemoController {
      
          def index() {
              render view: 'first'
          }
      }
      

      test/unit/demo/DemoControllerSpec.groovy:

      package demo
      
      import grails.test.mixin.TestFor
      import spock.lang.Specification
      
      @TestFor(DemoController)
      class DemoControllerSpec extends Specification {
      
          void "test render view"() {
              when:
              controller.index()
      
              then:
              '/demo/first' == view
          }
      }
      

      test/unit/demo/DemoControllerTests.groovy:

      package demo
      
      import grails.test.mixin.TestFor
      
      @TestFor(DemoController)
      class DemoControllerTests {
      
          void testRenderView() {
              controller.index()
              assert '/demo/first' == view
          }
      }
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 2021-12-05
        相关资源
        最近更新 更多