Spring MockMVC redirectUrlPattern выбрасывает «Нет шаблона пути в стиле Ant» - PullRequest
0 голосов
/ 23 января 2019

Я видел этот вопрос и этот вопрос . Я хочу сопоставить шаблон URL, поэтому я пишу свой тест в соответствии с ответами на эти вопросы.

@Autowired
private MockMvc mockMvc;

// Ant pattern, example URL: /courses/1/edit
private static final String CREATE_SUCCESS_URL = "/courses/[0-9]+/edit";
// ...
    this.mockMvc.perform(
            post("/courses/create")
                    .with(csrf())
                    .param("name", "New Course"))
            .andExpect(redirectedUrlPattern(CREATE_SUCCESS_URL));

Я не уверен в правильном синтаксисе шаблонов Ant, поэтому я также пробовал варианты, такие как:

  • CREATE_SUCCESS_URL = "/courses/{[0-9]+}/edit"
  • CREATE_SUCCESS_URL = "/courses/\\d+/edit"
  • CREATE_SUCCESS_URL = "/courses/\\d/edit"
  • CREATE_SUCCESS_URL = "/courses/{\\d+}/edit"
  • CREATE_SUCCESS_URL = "/courses/{id:\\d+}/edit"
  • CREATE_SUCCESS_URL = "/courses/{id:[0-9]+}/edit"

Но я всегда получаю исключение

java.lang.AssertionError: No Ant-style path pattern
    at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:36)
    at org.springframework.test.util.AssertionErrors.assertTrue(AssertionErrors.java:66)
    at org.springframework.test.web.servlet.result.MockMvcResultMatchers.lambda$redirectedUrlPattern$3(MockMvcResultMatchers.java:153)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:195)
    at by.naxa.stackoverflow.CoursesTest.givenNameWhenSubmitCreateCourseThenSuccess(
    ...

Еще одна вещь. Шаблон CREATE_SUCCESS_URL = "/courses/?/edit" работает нормально, но я бы хотел убедиться, что я сопоставляю только цифры.

Spring Boot версии 2.1.2. RELEASE.

1 Ответ

0 голосов
/ 23 января 2019

Действительный шаблон пути Ant для ваших требований будет выглядеть так:

CREATE_SUCCESS_URL = "/courses/{[0-9]*}/edit"

или

CREATE_SUCCESS_URL = "/courses/{\\d*}/edit"

Это AssertionError вызвано следующим методом внутри org.springframework.util.AntPathMatcher:

public boolean isPattern(String path) {
    return (path.indexOf('*') != -1 || path.indexOf('?') != -1);
}

Так что любая строка, содержащая * или ? будет работать.

...