Grails Spock集成测试redirectedUrl在localhost test-app和构建服务器test-app之间不同

标签 grails integration-testing spock grails-2.0.4

我有一个 Spock 集成测试,看起来像这样:

class PriceTierControllerIntegrationSpec extends IntegrationSpec {

    PriceTierController controller

    def setup() {
        controller = new PriceTierController()
    }

    def "applyDiscount() method will redirect user to success view"() {
        when:
        controller.applyDiscount()

        then:
        controller.response.redirectedUrl == '/priceTier/success'
    }

然后在 Controller 中,逻辑很简单:
class PriceTierController {

    def applyDiscount() {
        redirect action: 'success'
    }

    def success() {
    }
}

当我在本地机器上运行这个 Spock 测试时,测试通过了。但是,在构建服务器上,我收到以下错误:
controller.response.redirectedUrl == '/priceTier/success'
|          |        |             |
|          |        /test/success false
|          |                      8 differences (46% similarity)
|          |                      /(t---)e(st--)/success
|          |                      /(pric)e(Tier)/success
|              org.codehaus.groovy.grails.plugins.testing.GrailsMockHttpServletResponse@dc42543
com.test.PriceTierController@193d6547

由于某种原因,在构建服务器上,Spock 测试认为 Controller 名称是 test而不是 priceTier ,并且测试将失败。这似乎只发生在 Spock 集成测试中,因为 Spock 单元测试和一些遗留的 Grails mixin 测试都可以通过。

有谁知道可能导致这个问题的原因是什么?

最佳答案

我也刚刚遇到过同样的问题,似乎它归结为测试框架从测试类的名称中提取 Controller 名称。

约定是测试类被命名为 <controller name>ControllerSpec
在上述情况下,测试类应命名为 PriceTierControllerSpec以便测试框架将 Controller 成功解析为 PriceTeir .

根据这些指南命名类(class)似乎可以解决这个问题。

进一步的引用可以在这里找到:https://jira.grails.org/browse/GRAILS-10962

关于Grails Spock集成测试redirectedUrl在localhost test-app和构建服务器test-app之间不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822623/

相关文章:

gradle - 与Grab一起使用gradle时,如何确定我的规范的执行顺序?

unit-testing - 禁用 grails 命令对象中的验证约束以进行单元测试(使用 Spock)

mysql - 使用 Liquibase 从 MySQL 表中拆分列

grails - Groovy/Grails自动将NaN字符串转换为双字段

Grails 控制台自动完成

architecture - TDD: "Test Only"方法

grails - 在 IntelliJ IDEA 中设置 Grails 项目

testing - 在grails集成测试中重写服务方法

java - 如何通过 Maven 运行 stilliard/pure-ftpd

grails - 如何测试注入(inject)到 Grails 中其他服务的服务?