我的团队正在为我们的移动应用设置e2e tests
,他们希望模拟一些响应(例如,简单的响应200
,500
,缓慢的api响应等等)复杂的东西)。
在移动应用中,我们的服务器URL是全局VAR,对于每个请求,我们都会附加特定的路由,例如:
var serverURL = "https://api.domain.com/"
var getSavedURL = serverURL + "api/saved/GetSaved"
由于在运行e2e
路由的e2e
时更新一个全局变量(即serverURL)要容易得多,因此看起来很简单。像这样(例如,针对模拟错误):
var serverURL = "https://api.domain.com/e2e/error/"
var getSavedURL = serverURL + "api/saved/GetSaved"
基本上,我们只是在修改serverURL
,并且特定api调用的URL保持不变。
这是我现在得到的:
在WebApiConfig
中:
public static void Register(HttpConfiguration config)
{
// reporting api versions will return the headers "api-supported-versions" and "api-deprecated-versions"
config.AddApiVersioning(
o =>
{
o.AssumeDefaultVersionWhenUnspecified = true;
o.ReportApiVersions = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
});
config.Routes.MapHttpRoute(
"e2e_ERROR",
"e2e/error/api/{controller}/{action}"
);
config.Routes.MapHttpRoute(
"VersionedUrl",
"v{apiVersion}/{controller}/{action}/{id}",
new { id = RouteParameter.Optional },
new { apiVersion = new ApiVersionRouteConstraint() });
config.Routes.MapHttpRoute(
"Default",
"api/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
var appXmlType =
config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(
t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.EnableSystemDiagnosticsTracing();
}
最重要的部分是:
config.Routes.MapHttpRoute(
"e2e_ERROR",
"e2e/error/api/{controller}/{action}"
);
这是我的模拟e2e
控制器中的代码:
[ApiVersion("3.0")]
[RoutePrefix("e2e/error/api/saved/")]
public class SavedE2EController : ApiController
{
[HttpGet]
public IHttpActionResult GetSaved()
{
return Ok();
}
}
这是来自控制器的代码被模拟:
[Authorize]
[ApiVersion("3.0")]
[RoutePrefix("api/saved")]
public class SavedController : ApiController
{
[HttpGet]
[ActionName("GetSaved")]
public async Task<HttpResponseMessage> GetSaved()
{
// some code here
}
}
正在发生的事情是,当我输入以下URL时,第二个控制器SavedController
(包含实际代码的那个)被击中了:
http://localhost:7291/e2e/error/api/saved/GetSaved
我尝试了一堆其他配置,但是没有运气,例如将RoutePrefix更改为:
[RoutePrefix("~e2e/error/api/saved/")]
[RoutePrefix("~api/saved")]
或者完全删除RoutePrefix
,或者添加:
[Route("")]
[Route("~e2e/error/api/saved/GetSavedWorkouts")]
转到e2e
方法。
有人可以帮我解决这个问题吗?