2013-08-26 65 views
3
  • 的Grails 2.2.4
  • 斯波克0.7

我想測試正確的觀點是從一個Grails控制器呈現。我的創建方法如下:使用Grails斯波克單元測試斷言視圖控制器

def create() { 
    def documentCategories = DocumentCategory.list() 
    def documentTypes = DocumentType.list() 
    def documentComponents = DocumentComponent.list() 
    [documentCategories: documentCategories, 
     documentTypes: documentTypes, 
     documentComponents:documentComponents] 
} 

而且我的測試:

def "test create action"() { 
    given: 
    def model = controller.create() 

    expect: 
    response.status == 200 
    model.documentCategories.size() == 0 
    model.view == '/document/create' 
} 

我已經試過各種版本的model.view包括:

view == '/document/create' 
response.forwardedUrl == '/document/create' 

所有這些失敗,因爲model.viewview ,和response.forwardedUrl都是空的。建議?

+0

凹凸填充!你有沒有解決它?我處於類似的情況...... – marko

回答

4

正如你不會在控制器方法明確定義視圖,然後Grails的約定將如期舉行。因此到文檔匹配控制器和控制方法的名稱的視圖將被選擇 - >視圖:「controllerName /方法名」

關於你的問題,你不應該測試的Grails框架工作。你應該測試你的控制器的行爲,如你所願。

在這種情況下,您想要測試您的控制器沒有指定視圖,因爲這是控制器的預期行爲。

試驗,這將是:在你的控制器:如果你所說的「渲染(XXX視圖)」

then: 
    controller.modelAndView == null 
    response.redirectedUrl == null 

由於ModelAndView的將被創建。

呼叫重定向()或鏈()在你的控制器結果response.redirectedUrl在你的單元測試

0

嘗試增加作爲 Grails Test docs

import grails.test.mixin.TestFor 
@TestFor(MyController) 
+0

已經存在並且沒有什麼區別 – Gregg

1
view.endsWith('/document/create') 

指定以下到您的測試應該工作提供了viewmodel明確從controller呈現。

//controller 
render view: 'create', model: [documentCategories: documentCategories, 
           documentTypes: documentTypes, 
           documentComponents:documentComponents] 

在JUnit的情況下測試的viewmodel是可選的明確提及,但斯波克則需要天賦。

+0

我不想顯式地呈現視圖。所以這對我不起作用。 – Gregg

+0

@Gregg在這種情況下,我擔心你需要退回到其適當地配合您的需要爲這個特殊的測試JUnit測試。 – dmahapatro

相關問題