MVC - Как смоделировать / проверить POST (request.form) действия? - PullRequest
1 голос
/ 09 мая 2011

Имеет ли какой-нибудь пример кода модели запроса request.form в модульном тесте, вызывая контроллер, и контроллер успешно связывает запрос модели mock с моделью представления, используя атрибут Bind или Controller.TryUpdateModel(model)?

Это может показаться мне довольно распространенным требованием, но, увы, утро прошло, и я еще не нашел ничего адекватного и работающего.

ps Я гонялся за это все утро и не повезло, так как привязка модели не удалась.

1 Ответ

1 голос
/ 09 мая 2011

это всегда было намного сложнее, чем нужно было. В конце концов, решение простое и достаточно элегантное, хотя я предпочел бы найти какой-нибудь традиционный способ сделать это.

Хитрость заключается в добавлении параметра FormCollection к действию:

это будет введено MVC во время выполнения, но позволяет проверять во время теста:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Search([Bind(Prefix = "")] ManageUsersViewModel manageUsersViewModel, FormCollection form)
{

в тесте:

var form = new FormCollection
  {
    {"FindCriteria.SearchText", "searchText"},
    {"FindCriteria.AccountIsPending", "true"},
    {"FindCriteria.TermsHaveBeenAccepted", "true"}
  };
  sut.Search(new ManageUsersViewModel(), form);

Редактировать

Также кажется, что вам понадобятся две другие вещи - Bind - не работает, вам нужно убедиться, что у вашего контроллера есть controlcontext И вам нужно будет вызвать expiness, вызывая UpdateModel:

controller.ControllerContext = new ControllerContext();

...

UpdateModel(manageUsersViewModel, form.ToValueProvider());  

MVC 3 и я должен вернуться к этому, чтобы проверить простую отправку формы. БЕЗУМНОЕ В МЕМБРАНЕ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...