:
public async Task<IActionResult> Index(EmailConfirmationViewModel model)
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByNameAsync(model.Email);
if (user == null) return RedirectToAction("UserNotFound");
if (await _userManager.IsEmailConfirmedAsync(user)) return RedirectToAction("IsAlreadyConfirmed");
var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.Action("Confirm", "EmailConfirmation", new { userId = user.Id, token }, HttpContext.Request.Scheme);
await _emailService.SendEmailConfirmationTokenAsync(user, callbackUrl);
return RedirectToAction("EmailSent");
}
return View(model);
}
私はこの部分をモックに問題があります!
UrlHelperをモックするときは、基本メソッドUrl.Action(UrlActionContext context)のみをモックする必要があります。これは、すべてのヘルパーメソッドが実際にそれを使用するためです。
var mockUrlHelper = new Mock<IUrlHelper>(MockBehavior.Strict);
mockUrlHelper
.Setup(
x => x.Action(
It.IsAny<UrlActionContext>()
)
)
.Returns("callbackUrl")
.Verifiable();
_controller.Url = mockUrlHelper.Object;
また、私はHttpContext.Request.Schemeのnullのために問題があります。あなたは私が私の一般的なコントローラのセットアップに
var urlHelperMock = new Mock<IUrlHelper>();
urlHelperMock
.Setup(x => x.Action(It.IsAny<UrlActionContext>()))
.Returns((UrlActionContext uac) =>
$"{uac.Controller}/{uac.Action}#{uac.Fragment}?"
+ string.Join("&", new RouteValueDictionary(uac.Values).Select(p => p.Key + "=" + p.Value)));
controller.Url = urlHelperMock.Object;
を追加するHttpContext
_controller.ControllerContext.HttpContext = new DefaultHttpContext();
テスト中のメソッドの[mcve]を提供し、これまでにテストしようとした方法を – Nkosi
@Nkosi、ありがとう!私は自分の投稿を更新します –
この問題を解決したかどうか、どうすればそれを解決したかを知りたいです。 –