我有一个 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 测试都可以通过。
有谁知道可能导致这个问题的原因是什么?