GraphQLTestTemplate не получает автосвязь - PullRequest
0 голосов
/ 19 февраля 2020

Я использую GraphQLTestTemplate для проверки ответов на запросы.

@RunWith(SpringRunner.class)
@GraphQLTest
public class UnitTest {

    @Autowired
    private GraphQLTestTemplate graphQlTestTemplate ;
}

Когда я запускаю модульный тест, он выдает мне ошибку: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.graphql.spring.boot.test.GraphQLTestTemplate' available: expected at least 1 bean which qualifies as autowire candidate.

pom. xml:

        <graphql-spring-boot-starter-test.version>5.0.2</graphql-spring-boot-starter-test.version>
        <graphql-java-tools.version>5.2.4</graphql-java-tools.version>

1 Ответ

1 голос
/ 19 апреля 2020

Прежде чем дать вам рабочий фрагмент, мы должны уточнить несколько вещей.

  • Я использую: graphql-spring-boot-starter и
    graphql-spring-boot-starter-test, обе версии 6.0.0 .

    Последний встраивает junit 5, поэтому вам может не понадобиться использовать необходимость @RunWith

  • GraphQLTest загружает только секционированный контекст вашего приложения, которые являются bean-компонентами, связанными с GraphQL, то есть в ваших тестах вы должны высмеивать bean-компоненты, которые вы используете под капотом, как, например, сервис, используемый вашими определителями.

С учетом сказанного: вот мой рабочий тестовый пример, надеюсь, это поможет.

@GraphQLTest
public class UserQueryIntTest {


    @Autowired
    private GraphQLTestTemplate graphQLTestTemplate;

    @MockBean
    UserService userServiceMock;


    @Test
    @WithMockUser(username = TEST_USERNAME)
    public void getUser() throws Exception {

        User user = new User();
        user.setUsername(TEST_USERNAME);
        user.setPassword(TEST_PASSWORD);
        doReturn(user).when(userServiceMock).getUser(TEST_USERNAME, TEST_PASSWORD);

        GraphQLResponse response = graphQLTestTemplate.postForResource("graphql/get-user.graphql");
        assertThat(response.isOk()).isTrue();
        assertThat(response.get("$.data.getUser.id")).isNotNull();
        assertThat(response.get("$.data.getUser.username")).isEqualTo(TEST_USERNAME);
    }
}
...