Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振试验模拟图ql突变结果_Flutter_Dart_Graphql_Flutter Test_Flutter Graphql - Fatal编程技术网

Flutter 颤振试验模拟图ql突变结果

Flutter 颤振试验模拟图ql突变结果,flutter,dart,graphql,flutter-test,flutter-graphql,Flutter,Dart,Graphql,Flutter Test,Flutter Graphql,我正在尝试使用GraphQL为颤振应用程序创建小部件测试。 我想做的是测试应用程序的行为,这取决于用户操作上GraphQL变异的结果 这是一个非常简单的应用程序示例: 类FirstScreen扩展了无状态小部件{ @凌驾 小部件返回容器 儿童:突变 选项:myMutationOptions, 未完成:动态结果{ 最终bool myBool=结果['bool']作为bool; 如果myBool{ Navigator.ofcontext.PushMaterialPackageRouteBuilder

我正在尝试使用GraphQL为颤振应用程序创建小部件测试。 我想做的是测试应用程序的行为,这取决于用户操作上GraphQL变异的结果

这是一个非常简单的应用程序示例:

类FirstScreen扩展了无状态小部件{ @凌驾 小部件返回容器 儿童:突变 选项:myMutationOptions, 未完成:动态结果{ 最终bool myBool=结果['bool']作为bool; 如果myBool{ Navigator.ofcontext.PushMaterialPackageRouteBuilder:context=>SecondScreen; }否则{ Navigator.ofcontext.pushMaterialPageRoutebuilder:context=>ThirdScreen; } }, 生成器:运行变异运行变异,查询结果查询结果{ 返回按钮 子:文本“按钮”, onPressed:async{ 等待runMutationmyParameters.networkResult; }, ; }, , ; } 我想做的是模拟突变的结果,因此在我的小部件测试中,我可以测试按钮是否重定向到第二屏幕或第三屏幕,具体取决于结果myBool

我该怎么做

在flatter中创建类似http.Client的模拟 在测试中,将第一个屏幕包装在GraphqlProvider中,如下所示: 类MockHttpClient扩展Mock实现客户端{} 组“测试突变”{ MockHttpClient MockHttpClient; HttpLink HttpLink; 估价师客户; 设置异步{ mockHttpClient=mockHttpClient; httpLink=httpLink uri:'https://unused/graphql', httpClient:mockHttpClient, ; 客户端=ValueNotifier GraphQLClient 缓存:InMemoryCachestoragePrefix:“测试”, 链接:httpLink, , ; }; testWidgets“重定向到SecondScreen”,WidgetTester测试仪异步{ 当client.sendcaptureAny.thenAnswer/*…*/; 等待tester.pumpWidgetGraphQLProvider 客户:客户,, 孩子:第一屏, ; //点击按钮 验证mockhttpclient.sendany.called1; //等等。 }; } 在flatter中创建类似http.Client的模拟 在测试中,将第一个屏幕包装在GraphqlProvider中,如下所示: 类MockHttpClient扩展Mock实现客户端{} 组“测试突变”{ MockHttpClient MockHttpClient; HttpLink HttpLink; 估价师客户; 设置异步{ mockHttpClient=mockHttpClient; httpLink=httpLink uri:'https://unused/graphql', httpClient:mockHttpClient, ; 客户端=ValueNotifier GraphQLClient 缓存:InMemoryCachestoragePrefix:“测试”, 链接:httpLink, , ; }; testWidgets“重定向到SecondScreen”,WidgetTester测试仪异步{ 当client.sendcaptureAny.thenAnswer/*…*/; 等待tester.pumpWidgetGraphQLProvider 客户:客户,, 孩子:第一屏, ; //点击按钮 验证mockhttpclient.sendany.called1; //等等。 }; }
我终于成功地模拟了GraphQL突变。下面是我是如何做到的,它的灵感来自@Gpack的评论,但我不得不添加一些修改和细节

为了便于使用,我创建了一个包装小部件GraphQLMutationMocker:

类MockClient扩展Mock实现客户端{ 模拟客户端{ 这个,mockedResult, this.mockedStatus=200, }; 最终地图模拟结果; 最终模拟状态; @凌驾 未来sendBaseRequest请求{ 返回未来值 流光响应 Stream.valueutf8.encodejsonEncodemockedResult, 模拟状态, , ; } } 类GraphQLMutationMocker扩展了无状态小部件{ 常量图形模拟程序{ @需要这个孩子, this.mockedResult=const{}, this.mockedStatus=200, this.url=http://url', this.storagePrefix='test', }; 最后一个孩子; 最终地图模拟结果; 最终模拟状态; 最终字符串url; 最后的字符串前缀; @凌驾 小部件构建上下文上下文{ 最终mockClient=mockClient mockedResult:mockedResult, mockedStatus:mockedStatus, ; 最终httpLink=httpLink uri:url, httpClient:mockClient, ; 最终图形hqlclient=ValueNotifier GraphQLClient 缓存:InMemoryCachestoragePrefix:storagePrefix, 链接:httpLink, , ; 返回GraphQLProvider 客户:graphQLClient, 孩子:孩子, ; } } 然后编写测试就很容易了

组“测试突变”{ testWidgets“它应该重定向到SecondScreen”,WidgetTester测试仪异步{ 等待测试器.pumpWidgetGraphQLMutationMocker 模拟结果:{ “数据”:{ “布尔”:对, }, }, 孩子:第一屏, ; //点击按钮 wait tester.tapfind.text'Button'; 等待测试员的回答; //检查我是否在正确的屏幕上 expectfind.byTypeSecondScreen,findsOneWidget; expectfind.byTypeThirdScreen,findsNothing; }; testWidget s“它应该重定向到第三屏幕”,WidgetTester测试仪异步{ 等待测试器.pumpWidgetGraphQLMutationMocker 模拟结果:{ “数据”:{ “bool”:假, }, }, 孩子:第一屏, ; //点击按钮 wait tester.tapfind.text'Button'; 等待测试员的回答; //检查我是否在正确的屏幕上 expectfind.byTypeSecondScreen,findsNothing; expectfind.byTypeThirdScreen,findsOneWidget; }; }
我终于成功地模拟了GraphQL突变。下面是我是如何做到的,它的灵感来自@Gpack的评论,但我不得不添加一些修改和细节

为了便于使用,我创建了一个包装小部件GraphQLMutationMocker:

类MockClient扩展Mock实现客户端{ 模拟客户端{ 这个,mockedResult, this.mockedStatus=200, }; 最终地图模拟结果; 最终模拟状态; @凌驾 未来sendBaseRequest请求{ 返回未来值 流光响应 Stream.valueutf8.encodejsonEncodemockedResult, 模拟状态, , ; } } 类GraphQLMutationMocker扩展了无状态小部件{ 常量图形模拟程序{ @需要这个孩子, this.mockedResult=const{}, this.mockedStatus=200, this.url=http://url', this.storagePrefix='test', }; 最后一个孩子; 最终地图模拟结果; 最终模拟状态; 最终字符串url; 最后的字符串前缀; @凌驾 小部件构建上下文上下文{ 最终mockClient=mockClient mockedResult:mockedResult, mockedStatus:mockedStatus, ; 最终httpLink=httpLink uri:url, httpClient:mockClient, ; 最终图形hqlclient=ValueNotifier GraphQLClient 缓存:InMemoryCachestoragePrefix:storagePrefix, 链接:httpLink, , ; 返回GraphQLProvider 客户:graphQLClient, 孩子:孩子, ; } } 然后编写测试就很容易了

组“测试突变”{ testWidgets“它应该重定向到SecondScreen”,WidgetTester测试仪异步{ 等待测试器.pumpWidgetGraphQLMutationMocker 模拟结果:{ “数据”:{ “布尔”:对, }, }, 孩子:第一屏, ; //点击按钮 wait tester.tapfind.text'Button'; 等待测试员的回答; //检查我是否在正确的屏幕上 expectfind.byTypeSecondScreen,findsOneWidget; expectfind.byTypeThirdScreen,findsNothing; }; testWidgets“它应该重定向到第三屏幕”,WidgetTester测试仪异步{ 等待测试器.pumpWidgetGraphQLMutationMocker 模拟结果:{ “数据”:{ “bool”:假, }, }, 孩子:第一屏, ; //点击按钮 wait tester.tapfind.text'Button'; 等待测试员的回答; //检查我是否在正确的屏幕上 expectfind.byTypeSecondScreen,findsNothing; expectfind.byTypeThirdScreen,findsOneWidget; }; }