我正在创建一个非常简单的ViewResult
子类JavaScriptViewResult
,它在执行时调用基本实现,然后将Content-Type
响应设置为text/javascript
. 在尝试对此类进行单元测试时,我遇到了许多困难,以实现 ASP.NET MVC 堆栈的所有依赖项。
这是我使用 Rhino 的单元测试到目前为止的样子:
[TestMethod]
public void TestExecuteAction()
{
var request = MockRepository.GenerateMock<HttpRequestBase>();
request.Expect(m => m.Url).Return(new Uri("/Test/JavaScript", UriKind.Relative));
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
httpContext.Expect(m => m.Request).Return(request);
var controller = MockRepository.GenerateMock<ControllerBase>();
var virtualPathProvider = MockRepository.GenerateMock<VirtualPathProvider>();
var routeCollection = new RouteCollection(virtualPathProvider);
routeCollection.MapRoute("FakeRoute", "Test/JavaScript", new { controller = "Test", action = "JavaScript" });
var routeData = routeCollection.GetRouteData(httpContext);
var context = new ControllerContext(httpContext, routeData, controller);
var viewResult = new JavaScriptViewResult();
viewResult.ExecuteResult(context);
Assert.AreEqual("text/javascript", context.HttpContext.Response.ContentType);
}
运行测试时的最新例外NullReferenceException
是System.Web.Routing.Route.GetRouteData(HttpContextBase httpContext)
.
如何设置所有依赖项以执行ViewResult
? 有什么技术可以让这更简单吗?或者,有没有不同的方法可以利用 MVC 视图引擎生成 JavaScript 来设置正确Content-Type
的响应?