2013-07-23 100 views
1

我有一個斯波克集成測試,看起來是這樣的:Grails的斯波克集成測試redirectedUrl本地主機測試應用程序,並構建服務器測試應用程序之間的不同

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.codeh[email protected]dc42543 
[email protected] 

出於某種原因,在構建服務器時,斯波克測試認爲,控制器名稱是test而不是priceTier,測試將失敗。這似乎只發生在Spock集成測試中,因爲Spock單元測試和一些遺留的Grails mixin測試都通過正常。

有沒有人知道可能會導致這個問題?

+1

,請複製粘貼你用你的本地計算機上運行測試和構建服務器的命令。你使用不同的environemnt設置? –

回答

0

我也剛剛經歷過這個相同的問題,它似乎歸結爲測試框架從測試類的名稱中提取控制器名稱。

的約定是,測試類名爲<controller name>ControllerSpec

在上述情況下,測試類應該被命名爲PriceTierControllerSpec,以便測試框架將成功地解決了控制器PriceTeir

根據這些準則命名類似乎解決了這個問題。

而且參考可以在這裏找到:https://jira.grails.org/browse/GRAILS-10962