Grails newbはとても素朴ですが、私はいくつかのGroovyを知っていて、Javaのバックグラウンドを持っています。失敗しているテストがあるのGrails 2.3.9/Javaの1.8.0_101 :Grailsテストでの表示が失敗する
@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
}
}
は、私が想定し、「これは、私は、Java 6
コンテキストからのJava 8に更新していた古代のテストアプリですビュー "は、モデル化された/表示/コントローラのコード化されたバリアントへの参照です。
トップのアップデートがわかりました。何も保存されていない場合は何を更新しますか?私は移入を試み、SomethingPillsの宣言を更新しました。その結果、ビューはまだnullであった。どのような見方が予想されますか?
私が気づいたもう一つのこと。更新メソッドをクリックすると、2つのパラメータがあることがわかります。私はGroovyがデフォルトでパラメータを渡すことができないと仮定しています。それについてのエラーが表示されます。私はこれがうまくいくかどうかわかりませんが、ID &のバージョンをSomethingPillsから引き出して渡すと、nullの代わりに/ somethingPills/show/1 "を取得しますが、まだ/ somethingPills/editではありません。
[EDIT]私はこの発見しました:。あなたのPillsController.groovyファイルにhttp://docs.grails.org/2.3.9/guide/scaffolding.html
Duuuhh ... ;-) Um、OK。私は問題を見る。何らかの理由でこの言語では、いくつかのパラメータが期待される場所にパラメータを渡さなくてもかまいません。この場合、いずれかがnullの場合は、nullが返されます。それは慣れていくのが大変です。 – user447607
Groovyの真実(http://groovy-lang.org/semantics.html#Groovy-Truth)を調べるとよいでしょう。私はそれがあなたの将来のジレンマに答えることを願っています。 – elixir