【问题标题】:Grails UrlMappings Spock TestGrails UrlMappings Spock 测试
【发布时间】:2015-01-15 22:47:11
【问题描述】:

我在我的 UrlMappings.groovy 中定义了一个基本映射如果我运行我的应用程序并转到 /api/address/zip-code/12345 我会得到响应浏览器请求的显示操作。

group("/api/address"){
    "/zip-code"( resources: 'zipCode', includes: ['show'] )
}

我正在尝试创建一个测试来验证我的映射是否有效,因为我将在这里创建大量映射并且我希望它们得到测试的支持。这是我的测试。

package com.vega.foo

import com.vega.foo.address.ZipCodeController
import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import spock.lang.Specification
import org.codehaus.groovy.grails.web.mapping.UrlMappings

@TestFor(UrlMappings)
@Mock(ZipCodeController)
class UrlMappingsSpec extends Specification {

    void "test zip code mapping"() {
        expect:
        assertForwardUrlMapping("/api/address/zip-code/12345", controller: 'zipCode', action: "show")
    }

}

当我尝试运行此测试时,我收到以下错误。

编译[单元]测试时出现编译错误:BUG!阶段异常 源单元中的“指令选择” 'C:\websites********\test\unit\com\vega\foo\UrlMappingsSpec.groovy' 意外的 NullpointerException

这几乎是您可以编写的 URL 映射测试的基础。我在这里想念什么?

【问题讨论】:

  • 基于url映射,测试应该是assertForwardUrlMapping("/api/address/zip-code", controller: 'zipCode', action: "show")或者映射应该是group('/api/address'){ "/zip-code/$id"( resources: 'zipCode', includes: ['show'] ) }
  • 你实际上不需要$id。从文档中它将创建以下内容,我说我想要的只是展示动作。我可以通过访问 URL 手动验证这是否有效。 GET /books index GET /books/${id} 显示
  • assertForwardUrlMapping() 方法也不是问题。如果我用 expect: 1 == 1 替换我的测试,我会遇到同样的问题。 @TestFor(UrlMappings) 有问题
  • UrlMappingsSpec 应该在here 提到的默认包中。请参阅注释部分。
  • 不错的电话@dmahapatro,但我仍然收到同样的错误。很高兴知道它属于默认包,所以谢谢你!

标签: unit-testing grails groovy


【解决方案1】:

PR. This is how I was able to pass unit spec.

变化几乎是我在 cmets 中所做的。

  • $id添加到url映射。
  • 从测试中删除import org.codehaus.groovy.grails.web.mapping.UrlMappings
  • UrlMapping 中明确指定controlleraction

【讨论】:

  • 我们不想这样创建我们的映射。使用资源方式创建分配给每个动词的操作(post/get/put/delete),并允许您定义允许哪些操作。我知道你的方法行得通我只是对为什么引入资源不起作用有点困惑。
  • 你也会让一个班级一直认为有错误goo.gl/eyp1VQ
  • 同意。因为测试必须从默认包中引用UrlMappings。您可以在 IntelliJ 中添加 grails-app/conf 作为源目录,看看它会产生什么影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2014-06-21
  • 2012-03-29
  • 2016-09-21
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多