2

MvcContribでTestHelpersを使い始めたところです。IsAjaxRequest()がtrueであるかどうかをテストする、コントローラーのアクションメソッドを試してみたいと思います。

TestHelperサンプルに示されているのと同じコードを使用してTestControllerBuilderをセットアップしました

_controller = new StarsController();    
_builder = new TestControllerBuilder();
_builder.InitializeController(_controller);

そのため、_controllerにはすべての偽造/モックされたHttpContextが含まれています。これは本当に素晴らしいことです。しかし、内部的に偽造されたRequestオブジェクトのIsAjaxRequest()がtrueを返すように強制するにはどうすればよいですか?

4

2 に答える 2

7

これが私が使用したコードです。ページの上部にある私の質問のコードは、MvcContrib testhelpers を使用して、HttpRequest、HttpResponse などのバージョンを内部的に偽造した適切に偽造されたコントローラー (_controller) を作成します。次に、Patrick のアドバイスに従って、新しいヘッダーを作成しましたX-Requested-With のエントリを含むコレクション。次に、_controller.HttpContext.Request.headers に、ヘッダーを見ようとするたびにヘッダー コレクションを返すように指示しました (つまり、IsAjaxRequest() が呼び出されたときに発生します)。

    var headers = new NameValueCollection();
    headers.Add("X-Requested-With", "XMLHttpRequest");

    _controller.HttpContext.Request.Stub(r => r.Headers).Return(headers);

おやつのように機能します。

于 2010-05-28T14:54:33.147 に答える
2

値が「XMLHttpRequest」の「X-Requested-With」のエントリを含む NameValueCollection を返すには、HttpRequest.Headers プロパティをスタブ化する必要があります。

于 2010-05-28T13:01:48.863 に答える