Korzystanie Grails 2.1.0Testowanie kontrolera Grailsa na temat tworzenia twierdzeń o modelu podczas renderowania szablonu?
Wydaje się, że robi to z kontrolera:
render(view: "someView", model: [modelEntry: "hello"])
pozwala mi robić to w badanej jednostki dla tego kontrolera:
controller.method()
assert model.modelEntry == "hello"
Jednakże, jeśli Zmieniam kontroler, aby to zrobić:
render(template: "someTemplate", model: [modelEntry: "hello"])
Teraz model instancja w teście jest pustą tablicą. Zrobiłem sporo poszukiwań i większość rozwiązań wydaje się być dla Grails 1, często z udziałem obiektu modelAndView
(którego nie ma w moim teście) lub renderArgs
(ditto).
Jedynym rozwiązaniem znalazłem jest ręcznie zmienić poglądy w teście, jak to:
views['_someTemplate.gsp'] = '${modelEntry}'
a następnie podejmowania twierdzeń o ciąg. Ale ja nie lubię tego rozwiązania, ponieważ:
- wymaga testu zna nazwę pliku szablonu
- utrudnia badań modelowych wpisów, które nie mają dobrej toString() metody
- utrudnia tworzyć wiele asercji dotyczących powiązanych wpisów modelu.
Czy istnieje sposób na bardziej bezpośredni dostęp do wpisów w modelu z przypadku testowego, gdy kontroler renderuje szablon?
'controller.modelAndView.model' nie istnieje? –
@ SérgioMichels prawidłowe, 'controller.modelAndView' ma wartość null. Należy pamiętać, że używa się stylu idiomatycznego Grails 2, gdzie test jest deklarowany jako '@TestFor (WhateverController)', a test niczego nie rozszerza. Nie jestem pewien, czy funkcja modelAndView działa dla Grails 1 lub dlaczego zawsze widzę tę sugestię, ale i tak nie jest w tym typie testu dla Grails 2. – Rod