2011-01-18 12 views
0

アプリケーションのすべてのJSファイル名を取得するにはどうすればよいですか?すべてのJSファイル名を取得するには

私がテストした:

@Inject 
private ClientInfrastructure javascriptStack; 

void onActivate(){ 
    mesJavaScripts=javascriptStack.getJavascriptStack(); 

    for(Asset javascript : mesJavaScripts){ 
     System.out.println(javascript.toString()); 
    } 
} 

をしかし、私はすべてのJSを持っていません。良いサービスを利用していますか?それは変更することができますし、それは少し物事を遅くするかもしれないいくつかの内部に依存しているものの

おかげ

+0

実際、「基本」jsファイルがあります。スタックを取得するには、jsに@IncludeJavaScriptLibraryアノテーションを追加します。 – Gillespie59

答えて

1

私はまだここに必要性を追いかけません。必要なJSファイルがレスポンスに含まれているかどうかは、統合テストの問題です。これは、PageTester(返されたDOMを歩いて)やSelenium(クライアントDOMを歩いて)を使って判断できます。

実際、理想的には(そしてこれは難しい)、必要なJSがある場合にのみ通過するテストをSeleniumで書くことができます。タペストリーは、生産モードでは、JSスタックに一緒にあなたのスクリプトを集約します(そしてそれは5.3に何らかの方法で変更される可能性)ことを考えると

あなたは状態ではなく行動をテストしています。常にの動作をテストしてください。

+0

お返事ありがとうございます! – Gillespie59

1

この方法では、動作しているようです。必要に応じて、必要なページに設定されたリクエストパラメータに基づいてフィルタリングすることができます(RequestGlobalsをパラメータとして追加し、set/getAttributeを使用します)。

スクリプトを追加したときにキャプチャする独自のDocumentLinkerを提供する方が良い場合があります。

あなたAppModuleにこれを追加します。

public void contributeMarkupRenderer(OrderedConfiguration<MarkupRendererFilter> configuration, final Environment environment, final RequestGlobals request) { 
    MarkupRendererFilter getScripts = new MarkupRendererFilter() { 
    public void renderMarkup(MarkupWriter writer, MarkupRenderer renderer) { 
     DocumentLinker dl = environment.peek(DocumentLinker.class); 
     renderer.renderMarkup(writer); 
     try { 
     List<String> scripts = (List<String>)request.getAttribute("scripts"); 
     if (scripts != null) { 
      scripts.clear(); 
      Field f = dl.getClass().getDeclaredField("scripts"); 
      f.setAccessible(true); 
      scripts.addAll((List<String>)f.get(dl)); 
     } 
     } catch (Exception e) {} 
    } 
    }; 
    configuration.add("getScripts", getScripts, "after:DefaultValidationDecorator"); 
} 

をあなたのテストでは:

request.setAttribute("scripts", new ArrayList<String>()); 

実行ページ

assert request.getAttribute("scripts").contains(path_to_script_you_want_to_check); 

あなたは余分を取り除くためにどちらかの側を変更する必要があるかもしれませんがTapestryが追加するパス情報。

+0

私はTestNGテストで、良いjsファイルが含まれているかどうかチェックしたいだけです。 – Gillespie59

+0

@ Gillespie59:まあ、ブライアンがあなたのためにコードを効果的に書いたので、何があなたを止めることができましたか? – Henning

+0

私はあなたのテストでどのように使用できるかを示す答えを修正しました。テストで要求属性を設定して、スクリプトについて気にしていることを示すことができます。 –

関連する問題