我有一個MSpec測試來檢查我的窗體身份驗證是否正確重定向未授權的請求,但測試呼叫到受保護的動作只是徑直到它而不被授權逮住。 從我讀到的人們通常需要假驗證來測試[Authorize]標籤的操作,所以我不明白它是如何直接進入受保護的操作方法的。MVC MSpec測試不打[授權]屬性
如果有人能夠幫助這將是大加讚賞,這是我在使用MSpec第一次嘗試,它看起來像它應該是真正有用的,我只是無法得到它的工作!
控制器:
[Authorize]
public class HomeController : Controller
{
public ActionResult Index()
{
return View("Index", null);
}
}
測試:
[Subject("Login and Authentication")]
public class when_protected_page_invoked
{
private static HomeController homeController;
private static SecurityController securityController;
private static ActionResult result;
private Establish context =() =>
{
homeController = new HomeController();
securityController = new SecurityController(new SecurityService(new NHibernateRepository<User>(), new NHibernateRepository<Session>()));
};
private Because of =() => result = homeController.Index();
private It should_redirect_to_securityController =() =>
{
result.ShouldBeARedirectToRoute().And().ControllerName().ShouldEqual("Security");
};
}
當我運行它失敗,一個異常被返回的ViewResult時刻的考驗,如果我調試它只是返回Home.Index()結果。
如果您調試索引操作,User.Identity.IsAuthenticated返回什麼?也許MSpec在後臺設置爲true – 2012-01-31 10:38:53
HttpContext:null User:null – mckjerral 2012-01-31 10:45:13
[This question](http://stackoverflow.com/questions/669175/unit-testing-asp-net-mvc-authorize-attribute-到驗證重定向到登錄頁面)同一個問題,但與NUnit的建議,授權在所以不能被直接調用控制器來達到路由層踢英寸這是有道理的,但不贊同我所看到的表示你需要僞造認證的部分。 – mckjerral 2012-01-31 10:51:14