405 Метод запроса «POST» не поддерживается при тестировании пружинного приложения - PullRequest
0 голосов
/ 30 мая 2018

Я подготовил и расширил существующий пример пружины , который работает нормально.Вы можете просто войти в систему с помощью «user» и «password», и после этого вы будете перенаправлены в user / index.

Используя этот контроллер

@Controller
public class LoginController {
    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @GetMapping("/login-error")
    public String loginError(Model model) {
        model.addAttribute("loginError", true);
        return "login";
    }
}

Но как только я запускаю тестовый пример, которыйпри использовании WebClient тот же логин вызывает исключение:

com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 405 Request method 'POST' not supported for http://localhost:8080/login

, что странно, потому что само приложение работает просто отлично.

РЕДАКТИРОВАТЬ: Это метод тестирования, вызывающий проблему

@And("^the user clicks the login button$")
public void theUserClicksTheLoginButton() throws IOException {
    page = page.getElementById("login").click();
}

Я не ожидал, что метод click в WebClient использует POST вместо реального выполнения поля ввода в html.

<form th:action="@{/login}" method="post">
    <label for="username">Username</label>:
    <input type="text" id="username" name="username" autofocus="autofocus" /> <br />
    <label for="password">Password</label>:
    <input type="password" id="password" name="password" /> <br />
    <input type="submit" id="login" value="Log in" />
</form>

РЕДАКТИРОВАТЬ 2: Хорошо, может быть, я должен уточнить мой вопроснемного.Я знаю, что вход в систему должен осуществляться через POST, и мой @Controller предоставляет только @GetMapping, но это нормально, потому что Spring Security обрабатывает запросы POST, как я вижу в заголовке при входе в систему:

enter image description here

У меня вопрос , почему он работает нормально при работе приложения , и , почему при использовании WebClient * 1031 не происходит такое же поведение?*.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я не очень знаком с настройкой Spring с Cucumber, и я не уверен насчет смешивания бегунов SpringRunner и Cucumber в одной и той же настройке.

Я обновил ваш тестнастройте так:

@RunWith(SpringRunner.class)
@WebMvcTest
@ContextConfiguration
@Import(SecurityConfig.class)
public class LoginFeatureStepDefinition {
    private String username;
    private String password;
    private HtmlPage page;

    @Autowired
    private WebClient webDriver;
  1. Я заменил @SpringBootTest на @WebMvcTest, так как автоконфигурация mockmvc позаботится о настройке веб-клиента.Если вы хотите запустить реальный сервер со всем приложением и протестировать его с HTTP-клиентом, вам нужно настроить @SpringBootTest другим способом .
  2. В настройке MockMvc,конфигурация безопасности по умолчанию не импортируется, поэтому вам необходимо импортировать ее
0 голосов
/ 30 мая 2018

Веб-клиент вызывает службу по запросу POST, что вызывает исключение: Request method 'POST' not supported. Сторона службы выглядит хорошо.

...