2012-05-25 22 views
5

que tienen este método controlador:Cómo probar una ruta MVC con cadena de consulta parámetros opcionales

[GET("/whatever/list")] 
public ActionResult Index(string sortby, string order) 

Estoy tratando de probarlo con MvcContrib pruebas de ruta:

"~/whatever/list".ShouldMapTo<MyController>(c => c.Index(string.Empty, string.Empty)); 
"~/whatever/list?sortby=type&order=desc".ShouldMapTo<MyController>(c => c.Index("type", "desc")); 

Sin embargo, devuelve este error.

Fallo: MvcContrib.TestHelper.AssertionException: Valor de parámetro 'SortBy' no produjo: se esperaba '', pero fue ''; no se encontró ningún valor en el parámetro de acción de contexto de ruta llamado 'sortby' - ¿su ruta de coincidencia contiene un token llamado 'sortby'?

¿Qué me falta?

+1

Creo que las primeras pruebas fallaron :: '" ~/whatever/list ".ShouldMapTo (c => c.Index (string.Empty, string.Empty));' try with 'null' en lugar de' string.Empty' porque 'null' es el valor predeterminado de' string'. – nemesv

+0

Si tuviera que hacer eso como respuesta, lo marcaría como respondido. Eso pareció hacerlo, no sé por qué eso no me golpeó. –

Respuesta

3

Basado en el mensaje de aserción (expected '' but was ''; por lo que uno de los valores es null o string.Empty en el assertation) su primera prueba está fallando, ya que utiliza string.Empty pero el valor predeterminado de cadena es null

Cambie su aserción de utilizar null y debe wotk:

"~/whatever/list".ShouldMapTo<MyController>(c => c.Index(null, null)); 
+0

¿Qué pasaría si los parámetros de Index fueran enteros? Entonces no puedes pasar el nulo, ¿cómo harías ese pase de prueba (sin cambiar el método del controlador para excluirlo)? – BornToCode

+0

Entonces supongo que necesitaría usar '0' porque ese es el valor predeterminado de int. Así que su afirmación se vería como '" ~/whatever/list ".ShouldMapTo (c => c.Index (0, 0));' pero no puedo estar seguro sin ver su controlador y sus configuraciones de enrutamiento – nemesv

+0

En realidad, esto es lo que probé, pero la acción del controlador aceptó int y la aserción falla porque en su lugar obtiene un valor nulo (que no puedo pasar como no anulable int) - 'expected '0' pero era '' ' – BornToCode

2

he usado como

var route = "~/whatever/list".WithMethod(HttpVerbs.Get); 
route.Values.Add("sortby", "type"); 
route.Values.Add("order", "desc"); 
route.ShouldMapTo<MyController>(c => c.Index("type", "desc")); 
Cuestiones relacionadas