对于播放框架,仅在测试模式下运行一些控制器

时间:2011-12-23 15:43:58

标签: playframework

是否可以仅在测试模式下运行一些控制器路由

点击链接时我需要模拟一些响应。我会创建控制器和路径,只有在我运行游戏测试时才可用。

有可能吗?

4 个答案:

答案 0 :(得分:5)

正如迈克所说,我博客的代码确实向您展示了如何配置您的路线文件,以便只有某些路线在Dev或Prod模式下可用。所以......

%{ if (play.mode.isDev()) { }%
GET     /route4                                 Application.noProd
GET     /route5                                 Application.noProd
GET     /route6                                 Application.noProd
%{ } }%

但是,这确实会阻止这些路由在Prod模式下工作,但它们不会排除控制器被访问。这样做的原因是,你很可能在路径文件的底部有以下内容

*       /{controller}/{action}                  {controller}.{action}

这意味着我可以使用catch all route访问Application.noProd操作,这将是以下URL

/application/noprod

因此。如果你想隐藏你的路线和你的控制器,你有几个选择。

  1. 您可以删除catch-all路由,这样除了您设置的特定路由之外没有其他条目。这意味着您需要为路径文件中的所有操作指定所有路径。

  2. 其次,您可以在行动中检查play.mode.isDev(),并致电badRequest()以阻止访问。这将使这更加明显,但在编码中可能是一个不可接受的开销。

答案 1 :(得分:2)

是的可能。您可以将代码添加到路径文件中,如:

%{ if (play.mode.isDev()) { }%
    GET     /route4                                 Application.noProd
    GET     /route5                                 Application.noProd
    GET     /route6                                 Application.noProd
    %{ } }%

本网站上解释了所有内容:http://playframework.wordpress.com/2011/07/15/hidden-features-of-the-play-framework-routes-file/

答案 2 :(得分:0)

我只是成功地将其设置为:

%{ if (play.id.equals("test")) { }%
GET     /testme                                         Test.index
%{ } }%

所以只有在你运行“游戏测试”时才会存在路线,这是更具体的。

另外,我将控制器Test放在../test/controllers/上,因此在生产模式下不存在。 不知何故,我不得不将我的观点/ Test / index.html放在... / app中,因为它无法在... / test中找到,这很奇怪,因为控制器 .../测试。我可能会为此提出一个问题,但我不会因为Play2已经很久了。

答案 3 :(得分:0)

隐藏测试控制器和视图的另一种方法是将它们移动到测试目录。 只需在测试文件夹中创建一个控制器包,例如:

public class TestController extends Controller {
    public static void show() {
        renderTemplate("/test/views/Test/show.html");
    }
}

因此,除了测试之外,您可以保持全部路线并且您的TestController永远不会以公共模式公开。