2012-03-20 8 views
0

内のtaglibのユニットテスト中に空になっている私は(2.0.1をGrailsの)タグライブラリで自分のコードをテストしようとしています:属性は、Grailsの

class ATagLib { 
    static namespace = "s" 
    def person = {attrs, body -> out << attrs.person;} 
} 

@TestFor(ATagLib) 
class ATagLibTests { 
    @Test 
    void test() { 
     String p = 'Joe' 
     // None of these work for me. 
     assert applyTemplate('<s:person person="${p}"/>') == 'Joe' 
     assert applyTemplate('<s:person/>', [person:p]) == 'Joe' 
    } 
} 

attrs.personがnullであるため、テストは常に、失敗します。属性を正しく設定するにはどうすればよいですか?

答えて

0

テンプレートテキストに一重引用符を使用しているという問題はありますか? GStringsだけが変数を挿入するために$記法を使用できます。単一引用符はそれをであなたの値を代入しません通常のJavaのStringを作る

はこれを試してみてください:。

assert applyTemplate("<s:person person=\"${p}\"/>") == "Joe" 
+0

Davidさんに感謝しますが、うまくいきませんでした。私はまた、単一引用符/二重引用符を切り替えたり、三重引用符を使用しようとしました。どちらも役に立たなかった。 –

+0

@AlexanderShyrokovタグライブラリ内から 'attrs'を出力するとどうなるでしょうか? – David

2

これは動作します:

String p = 'Joe' 
assert applyTemplate('<s:person person="${person}"/>', [person:p]) == 'Joe' 
assertOutputEquals('Joe is cool !', '<s:person person="${person}"/>', [person:p], { it.toString() + " is cool !" }) 

これでApplyTemplateの最初の署名を呼び出して、これは次のとおりです。

String applyTemplate(String contents, Map model = [:]) 

enter image description here

+0

これは私にとってはうまくいきません。 –

+0

それは変です。自分の環境で問題なくテストしました...どのようにテストを開始しますか?コマンドラインから?対話型コンソール? STS? – Philippe

+0

私はSTSを使っていました。私はコマンドラインを使ってみよう。 –