0

次のコントローラーを用意します。

  def index() {
    ...
    render(view: 'index', model: [exceptions: exceptions]                                                                                         
    }        

単体テストもあります:

  def testIndex(){
    ...
    controller.index()
    assert controller.response.status == 200
    assert controller.response.contentAsString != ""
  }

2 番目のアサーションは失敗し、contentAsString"" が返されます。render()myをrender("html")-に置き換えると、contentAsStringテスト中でも満たされます。私が間違っていることは何ですか?

更新 1

インデックス.gsp

<%@ page contentType="text/html"%>
<%@ page import="org.apache.commons.lang.exception.ExceptionUtils" %>
<html>
<head>
<title>Exceptions catched during crawling</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script type="text/javascript">
  $(function(){
     $(".stacktrace").hide()
     $("a").click(function(){
       $(this).parents("li").siblings("pre").toggle()
   return false;
     })
  })
</script>
</head>
<body>
<g:each var="entry" in="${exceptions.entrySet()}">
  Catched <b>${entry.key.name}</b> for these URLs:                                                                                                                                                                                         
  <ol>
    <g:each var="ex" in="${entry.value.entrySet()}">
      <li><a href="${ex.key}">${ex.key}</a>: ${ex.value.message}</li>
        <pre class="stacktrace">
          ${ExceptionUtils.getStackTrace(ex.value)}
        </pre>
</g:each>
  </ol>
</g:each>
</body>
</html>

UPDATE 2 grails 2.2.3 から grails 2.2.4 へのアップグレードは役に立ちません;(

4

1 に答える 1

2

わかりました、ドキュメントの単体テストのセクションを再訪しました。response.contentAsStringテキストを直接レンダリングする場合にのみ使用できるようです。ビューのレンダリングについては、ドキュメントの「Testing View Rendering」の項目を確認できます。

例:

// Test class
class SimpleController {
    def home() {
        render view: "homePage", model: [title: "Hello World"]
    }
    …
}

void testIndex() {
    controller.home()
    assert view == "/simple/homePage"
    assert model.title == "Hello World"
}
于 2013-08-27T12:07:50.717 に答える