2016-10-07 64 views
0

我是一個非常原始的Grails新手,但我知道一些Groovy,我有一個Java背景。這是一個古老的測試程序,我從Java 6Grails測試失敗的視圖

上下文更新到Java 8:Grails的2.3.9/Java的1.8.0_101 發生故障的考驗是:

@TestFor(PillsController) 
@Mock(Pills) 
class PillsControllerTests { 
... 
void testUpdate() { 
    controller.update() 

    assert flash.message != null 
    assert response.redirectedUrl == '/somethingPills/list' 

    response.reset() 

    populateValidParams(params) 
    def somethingPills = new SomethingPills(params) 

    assert somethingPills.save() != null 

    params.id = somethingPills.id 

    controller.update() 

    assert view == "/somethingPills/edit" //<--- FAILS HERE. VIEW IS NULL. 
    assert model.somethingPillsInstance != null 

    somethingPills.clearErrors() 

    populateValidParams(params) 
    controller.update() 

    assert response.redirectedUrl == "/somethingPills/show/$somethingPills.id" 
    assert flash.message != null 

    response.reset() 
    somethingPills.clearErrors() 

    populateValidParams(params) 
    params.id = somethingPills.id 
    params.version = -1 
    controller.update() 

    assert view == "/somethingPills/edit" 
    assert model.somethingPillsInstance != null 
    assert model.somethingPillsInstance.errors.getFieldError('version') 
    assert flash.message != null 
} 
} 

我承擔「視圖「是對模型/視圖/控制器的一些編碼變體的引用。

我發現頂部的更新令人困惑。更新什麼如果沒有保存?我試着移動填充和上面的SomethingPills聲明更新。結果是該觀點仍然是空的。我怎樣才能預測什麼樣的觀點?

我注意到的另一件事。如果我點擊更新方法,我看到有兩個參數。我假設Groovy允許你默認傳遞任何參數,否則我會看到一個錯誤。我不知道它是如何工作的,但如果我從SomethingPills中取出ID &並傳遞它們,我會得到/ somethingPills/show/1「而不是null,但仍然不是」/ somethingPills/edit「。

[編輯]我發現這一點:http://docs.grails.org/2.3.9/guide/scaffolding.html

回答

0

轉到您的PillsController.groovy文件並找到update()方法

看看你是否有這樣

render view:'/somethingPills/edit', .... 
聲明

在單元測試中,視圖指的是控制器呈現的gsp文件的路徑。

我很確定update()方法中會有一些邏輯,如果單元測試仍然失敗,您需要發佈這些邏輯。形成單元測試,看起來好像有些條件匹配,然後呈現gsp模板,否則它會重定向。

+0

Duuuhh ... ;-)嗯,好的。我看到了問題。由於某種原因,在這種語言中可以不傳遞任何參數。在這種情況下,如果其中任何一個爲null,則返回null。這將需要很多習慣。 – user447607

+0

你可能想看看Groovy的真相(http://groovy-lang.org/semantics.html#Groovy-Truth)。我希望這會回答你未來的困境。 – elixir