2015-12-10 1 views
1

Я пытаюсь протестировать обработчик формы входа в систему, используя Play! однако я всегда получаю 404 в качестве кода статуса при выполнении теста.FakeRequest возвращает 404

@Test 
public void testAuthenticate() { 
    HashMap<String, String[]> formData = new HashMap<>(); 
    String[] email = {"[email protected]"}; 
    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() 

ли URI, что я вхожу в contrusctor FakeRequest плохо или есть что-то еще, что мне не хватает.

Благодаря

ответ

0

Я заканчивал тем, что на другом подходе, чтобы проверить данные формы в рамках Play. Возможно, не так элегантно, но это трюк.

@Test 
public void testAuthenticate() { 
    HashMap<String, String> formData = new HashMap<>(); 
    formData.put("email", "[email protected]"); 
    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()); 
} 
0

Даже если это старый вопрос, у меня была такая же проблема и вы нашли решение. Это было в том, как я прошел тест.

Таким образом, основная проблема, которую я обнаружил, - это изменения в файле маршрутов, которые не были пикапом. Мой тест прошел все, как только я сделал sbt run, чтобы вручную протестировать мой API.

Проблема была в моих настройках IntelliJ SBT. Чтобы исправить все (что означает, что когда IntelliJ строит мой проект, он фактически вызывает sbt compile в фоновом режиме), просто установите флажок «Использовать оболочку SBT для сборки и импорта» в окне настроек «Build, Execution, Deployment/Build Tools/SBT» и voilà !