1

我有一个 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'
    }

然后在控制器中,逻辑很简单:

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 测试认为控制器名称test不是priceTier,因此测试会失败。这似乎只发生在 Spock 集成测试中,因为 Spock 单元测试和一些遗留的 Grails mixin 测试都可以通过。

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

4

1 回答 1

0

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

约定是测试类被命名<controller name>ControllerSpec

在上述情况下,应命名测试类,PriceTierControllerSpec以便测试框架成功地将控制器解析为PriceTeir.

根据这些指南命名课程似乎可以解决这个问题。

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

于 2014-11-25T04:49:02.607 回答