Запросы Ajax для модульного тестирования ASP.Net MVC RC

Мы только начали использовать ASP.Net MVC Release Candidate, и тестовый проект, который у нас есть, ранее тестировал запросы Ajax с помощью бета-версии MVC.

Старый код выглядел примерно так:

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;

Затем вызов UpdateStatus будет использовать метод IsMvcAjaxRequest () для объекта запроса, чтобы определить, что вернуть в браузер.

Замена в ASP.Net MVC Release Candidate на Request.IsMvcAjaxRequest () метода расширения Request.IsAjaxRequest () означает, что способ имитации заголовков запроса изменен на:

request.Expect(req => req["X-Requested-With"]).Returns("XMLHttpRequest");

Я надеюсь, что другие сочтут это полезным


person Psiren    schedule 28.01.2009    source источник
comment
Я бы предпочел, чтобы вы задали этот вопрос как вопрос, а затем ответили бы на него. В том виде, в каком он сейчас сформулирован, я бы закрыл его, как не настоящий вопрос - хотя и ценную информацию. Я только что закончил менять все свои модульные тесты для работы с RC1.   -  person tvanfosson    schedule 28.01.2009
comment
это было прекрасно! Я как сумасшедший искал эту информацию! =) Я надеюсь, что в финальной версии это будет проще - в конце концов, ответы на запросы ajax и их тестирование должны быть максимально простыми, поскольку мы все будем это делать очень часто.   -  person Tomas Aschan    schedule 30.01.2009


Ответы (2)


Мне было известно, что в блоге Скотта Гу упоминается об изменении, но в нем не приводятся примеры кода, отражающие влияние на тестовый код или значение, которое необходимо вернуть, чтобы имитировать запрос Ajax. подумал, что это может обеспечить быстрое и простое исправление этого изменения в кандидате на выпуск.

person Psiren    schedule 28.01.2009

Эта и многие другие проблемы описаны в Блог Скотта Гатри на RC1. Ищите раздел об улучшениях AJAX. Еще я заметил, что UpdateModel больше не принимает FormCollection. Мне нужно переделать свои модульные тесты, чтобы смоделировать коллекцию Request.Form NameValueCollection. Однако полученный код, вероятно, лучше, так что боль того стоит.

РЕДАКТИРОВАТЬ: еще одна ошибка. Если у вас есть существующее приложение MVC, которое использует ASP.NET MVC Ajax, вам необходимо вручную обновить файлы Javascript, иначе оно не распознает запросы как запросы AJAX. В старых файлах javascript вместо HTTP-заголовка X-Requested-With добавлен механизм поля формы __MVCASYNCPOST. Я нашел новые версии в C:\Program Files\Microsoft ASP.NET\ASP.NET MVC RC\Temp\MvcWebApplicationProjectTemplateRC.cs.zip - в каталоге Scripts.

person tvanfosson    schedule 28.01.2009