テストの初心者なので、ご容赦ください。
次のように Url.Action によって計算された文字列を含む JsonResult を返すコントローラーがあります。
public ActionResult GetResult(SomeModel model)
{
if (ModelState.IsValid)
{
return Json(new { redirectTo = Url.Action("Index", "Profile") });
}
}
そして、jQuery を使用してその結果を使用すると、アプリケーションは問題なく動作します。
ただし、単体テスト中に問題が発生しました。これは、Json 文字列のコンテンツをテストすると、アプリケーション自体では null ではないにもかかわらず、redirectTo 値が「null」に見えるためです。
私のテスト方法は次のようになります。
[Test]
public void GetResult_Success()
{
var result = controller.GetResult(new SomeModel());
Assert.IsNotNull(result);
Assert.IsInstanceOf<JsonResult>(result);
var jsonResult = result as JsonResult;
var jsonObject = JsonConvert.DeserializeAnonymousType(new JavaScriptSerializer().Serialize(jsonResult.Data), new
{
redirectTo = string.Empty
});
Assert.AreEqual("Profile/Index", jsonObject.redirectTo);
}
jsonObject.redirectTo が null であるため、これは失敗します。コントローラーで Url.Action を「Profile/Index」に変更すると、テストに合格します。ただし、Url.Action("Index", "Profile") は単体テストでのみ null になるため失敗します。
テストのコンテキスト設定でルート値を設定しようとすると、すでに登録されていると不平を言います。Moqを使用しています。何を設定する必要があるか考えていますか?よろしくお願いします