3

ASP.Net MVC Release Candidate の使用を開始したばかりで、以前は MVC ベータ版で Ajax リクエストをテストしていたテスト プロジェクトを使用していました。

古いコードは次のようになります。

Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
Mock<HttpResponseBase> response = new Mock<HttpResponseBase>();
Mock<HttpContextBase> context = new Mock<HttpContextBase>();

context.Expect(c => c.Request).Returns(request.Object);
context.Expect(c => c.Response).Returns(response.Object);

request.Expect(req => req["__MVCASYNCPOST"]).Returns("true");

MyController controller = new MyController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
ViewResult result = controller.UpdateStatus() as ViewResult;

UpdateStatus の呼び出しでは、要求オブジェクトで IsMvcAjaxRequest() メソッドを使用して、ブラウザに何を返すかを決定します。

ASP.Net MVC Release Candidate の Request.IsMvcAjaxRequest() から Request.IsAjaxRequest() の拡張メソッドへの変更は、リクエスト ヘッダーをモックする方法が次のように変更されることを意味します。

request.Expect(req => req["X-Requested-With"]).Returns("XMLHttpRequest");

他の人がこれが役立つことを願っています

4

2 に答える 2

1

この問題と他の多くの問題は、 RC1 に関するScott Guthrie のブログで取り上げられています。AJAX の改善に関するセクションを探してください。私が気付いたもう 1 つのことは、UpdateModel が FormCollection を使用しなくなったことです。Request.Form NameValueCollection をモックアップするために、単体テストを作り直す必要があります。ただし、結果のコードはおそらくより優れているため、苦労する価値はあります。

編集:別の落とし穴。ASP.NET MVC Ajax を使用する既存の MVC アプリケーションがある場合は、Javascript ファイルを手動で更新する必要があります。そうしないと、要求が AJAX 要求として認識されません。古い JavaScript ファイルは、 HTTP ヘッダー__MVCASYNCPOSTを設定する代わりに、フォーム フィールド メカニズムを追加します。X-Requested-With新しいバージョンはC:\Program Files\Microsoft ASP.NET\ASP.NET MVC RC\Temp\MvcWebApplicationProjectTemplateRC.cs.zip-- Scripts ディレクトリにあります。

于 2009-01-28T16:16:31.397 に答える