如何测试每个客户端都有子域的Grails webapp?

如何测试每个客户端都有子域的Grails webapp?,grails,testing,subdomain,Grails,Testing,Subdomain,我正在开发一个基于Grails的webapp,它的客户端有自己的子域。我通过请求URL在UrlMappings中获取客户机标识,并将该信息放入控制器将使用的params对象。授予此场景正确性的最佳方法和测试类型是什么?我正在寻找独立于平台的解决方案我不想在每台运行测试的机器上编辑/etc/hosts文件我们有不同的方法来实现我们想要的,因为我对您的UrlMappings解决方案感兴趣 我编写了一个Groovy特性,类似SubdomainAware,每个控制器都实现了它。然后,该特性有一个gett

我正在开发一个基于Grails的webapp,它的客户端有自己的子域。我通过请求URL在UrlMappings中获取客户机标识,并将该信息放入控制器将使用的params对象。授予此场景正确性的最佳方法和测试类型是什么?我正在寻找独立于平台的解决方案我不想在每台运行测试的机器上编辑/etc/hosts文件

我们有不同的方法来实现我们想要的,因为我对您的UrlMappings解决方案感兴趣

我编写了一个Groovy特性,类似SubdomainAware,每个控制器都实现了它。然后,该特性有一个getter,比如getCustomer,它从请求对象嗅探域并获取customer域对象,因此在我的控制器中,我可以执行User.findAllByCustomercustomer之类的操作


对于功能测试和单元测试,我允许一个额外的GET或POST参数forceDomain,我的SubdomainAware特性也会查找它,尽管它仅在非生产环境中,并且优先于实际请求的域。这允许我在测试中模拟我想要的任何子域。

在这个问题之前,我的UrlMappings标识了子域。但是,过了一段时间,我得出结论,最好的方法是在任何控制器的任何操作之前创建一个过滤器,该过滤器提取子域并创建一个具有该值的请求属性,这样任何操作都可以恢复该值。那么在过滤器代码中执行类似操作如何:if Environment.current!=Environment.PRODUCTION&¶ms.mockDomain{return params.mockDomain}else{/*获取子域的真实代码*/},假设代码必须返回所使用的子域;你可能需要调整它。然后,您可以在测试中使用mockDomain GET或POST参数强制域。