Net MVC RC单元测试Ajax请求

Net MVC RC单元测试Ajax请求,ajax,asp.net-mvc,testing,xmlhttprequest,Ajax,Asp.net Mvc,Testing,Xmlhttprequest,我们刚刚开始使用ASP.NETMVC候选发布版本,我们之前的测试项目是使用MVCETA测试Ajax请求 旧代码如下所示: Mock<HttpRequestBase> request = new Mock<HttpRequestBase>(); Mock<HttpResponseBase> response = new Mock<HttpResponseBase>(); Mock<HttpContextBase> context = ne

我们刚刚开始使用ASP.NETMVC候选发布版本,我们之前的测试项目是使用MVCETA测试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;

我希望其他人会觉得这个问题很有用

这个问题以及其他许多问题都会在RC1的博客中讨论。查看有关AJAX改进的部分。我注意到的另一件事是UpdateModel不再接受FormCollection。我不得不修改我的单元测试来模拟请求。表单NameValueCollection。不过,生成的代码可能更好,因此付出的代价是值得的


编辑:又一个问题。如果现有的MVC应用程序使用ASP.NET MVC Ajax,则需要手动更新Javascript文件,否则它将无法将请求识别为Ajax请求。旧的javascript文件添加了
\uu MVCASYNCPOST
表单字段机制,而不是设置
X-request-With
HTTP头。我在脚本目录中的
C:\Program Files\Microsoft ASP.NET\ASP.NET MVC RC\Temp\MvcWebApplicationProjectTemplateRC.cs.zip中找到了新版本。

我知道Scott Gu的博客提到了这一变化,但它没有提供任何代码示例,说明对测试代码的影响,也没有提供模拟所需返回的值Ajax请求。我认为这可能会为候选版本中的此更改提供一个快速而简单的解决方案。

如果您将此作为一个问题提出,然后提供您的答案,我会更愿意这样做。按照现在的措辞,我会以“不是一个真正的问题”来结束它——尽管这是有价值的信息。我刚刚完成了将所有单元测试更改为使用RC1的工作。这太棒了!我一直在疯狂地寻找这些信息!=)我确实希望最终版本会更简单——毕竟,响应和测试ajax请求应该尽可能简单,因为这是我们经常做的事情。
request.Expect(req => req["X-Requested-With"]).Returns("XMLHttpRequest");