FakeRequest返回404

时间:2015-12-10 13:21:27

标签: playframework playframework-2.4

我正在尝试使用Play测试登录表单处理程序!但是在执行测试时我总是得到404作为状态代码。

@Test
public void testAuthenticate() {
    HashMap<String, String[]> formData = new HashMap<>();
    String[] email = {"admin@domain.com"};
    String[] password = {"password123"};
    formData.put("email", email);
    formData.put("password", password);
    Http.RequestBuilder request = Helpers.fakeRequest("POST", "/app-service/login").bodyFormArrayValues(formData);

    Result result = route(request, maxTimeout);

    assertNotNull(result);
    assertEquals(OK, result.status());
}

在我的路线中,我有这个

POST    /app-service/login                      @controllers.AuthenticationController.authenticate()

我在FakeRequest控制器中输入的URI是否错误,或者是否有其他我遗漏的错误。

由于

2 个答案:

答案 0 :(得分:0)

我最终采用了另一种方法来测试Play框架中的表单数据。也许不那么优雅,但它可以解决问题。

@Test
public void testAuthenticate() {
    HashMap<String, String> formData = new HashMap<>();
    formData.put("email", "admin@domain.com");
    formData.put("password", "password123");
    Http.RequestBuilder request = new Http.RequestBuilder().bodyForm(formData);

    Helpers helpers = new Helpers();
    Callable<Result> callable = new Callable() {
        @Override
        public Object call() throws Exception {
            F.Promise promise = controller.authenticate();
            return promise.get(maxTimeout);
        }
    };

    Result result = helpers.invokeWithContext(request, callable);

    assertNotNull(result);
    assertEquals(OK, result.status());
}

答案 1 :(得分:0)

即使这是一个老问题,我也遇到了完全相同的问题并找到了解决方案。这是我如何运行我的测试。

所以我发现的主要问题是路线文件的修改没有被提取。我做了00 1F 60 00 05 80 53 08 00 20 20 01 00 00 80 00 00 92 00 00 00 31 07 00 05 31 32 33 34 31 32 33 34 手动测试我的API后,我的测试全部通过了。

问题出在我的IntelliJ SBT设置中。要修复所有内容(意味着确保当IntelliJ构建我的项目时,它实际上在后台调用sbt run),只需在“构建,执行,部署/构建工具/ SBT”中选中“使用SBT shell进行构建和导入”设置窗口和voilà!