Flutter 测试 GraphQL 查询

问题描述

我想测试我的 GraphQL 查询我有我的 GraphQL 客户端,我使用远程数据源来处理我的请求。

class MockGraphQLClient extends Mock implements GraphQLClient {}

void main() {
  RemoteDataSource RemoteDataSource;
  MockGraphQLClient mockClient;

  setUp(() {
    mockClient = MockGraphQLClient();
    RemoteDataSource = RemoteDataSource(client: mockClient);
  });
  group('RemoteDataSource',() {
    group('getDetails',() {
      test(
          'should preform a query with get details with id variable',() async {
        final id = "id";
        when(
          mockClient.query(
            QueryOptions(
              documentNode: gql(Queries.getDetailsQuery),variables: {
                'id': id,},),).thenAnswer((_) async => QueryResult(
            data: json.decode(fixture('details.json'))['data'])));

        await RemoteDataSource.getDetailsQuery(id);

        verify(mockClient.query(
          QueryOptions(
            documentNode: gql(Queries.getDetailsQuery),variables: {
              'id': id,));
      });
    });
  });
}

我想知道如何模拟我的查询的响应。目前不返回结果,返回null 但是我不明白为什么我的查询返回 null,尽管我嘲笑了我的客户,并且在我的“when”方法中我使用了“thenAnwser”来返回所需的值

final GraphQLClient client;

  ChatroomremoteDataSource({this.client});

  @override
  Future<Model> getDetails(String id) async {
    try {
      final result = await client.query(QueryOptions(
        documentNode: gql(Queries.getDetailsQuery),variables: {
          'id': id,)); // return => null ????

      if (result.data == null) {
        return [];
      }
      return result.data['details']
    } on Exception catch (exception) {
      throw ServerException();
    }
  }

解决方法

when 应该模拟答案的论点非常复杂。您可能更容易在测试用例中使用 any

when(mockClient.query(any)).thenAnswer((_) async => QueryResult(
        data: json.decode(fixture('details.json'))['data'])));

any 由 Mockito 提供以匹配任何参数。