我是一個非常原始的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
Duuuhh ... ;-)嗯,好的。我看到了問題。由於某種原因,在這種語言中可以不傳遞任何參數。在這種情況下,如果其中任何一個爲null,則返回null。這將需要很多習慣。 – user447607
你可能想看看Groovy的真相(http://groovy-lang.org/semantics.html#Groovy-Truth)。我希望這會回答你未來的困境。 – elixir