我正在尝试为应用程序中的登录屏幕创建窗口小部件测试。 所以我想测试几件事: 1.我可以在屏幕上找到所有需要的小部件 2.空字段验证 3.错误的登录名或密码方案 4.成功登录方案
但是我坚持第3项和第4项。正如我在小部件测试中发现的那样,flutter不允许api调用-因此在每种情况下响应都是400。
我找到了一种使用mockHtmlClient编写测试的方法。受此主题https://groups.google.com/forum/#!msg/flutter-dev/AnqDqgQ6vus/8BoHfxoNBwAJ
的启发 HttpOverrides.runZoned(() async {
// All code inside here will use the HttpClient returned below.
await tester.pumpWidget(buildTestableWidget(LoginScreen()));
Finder emailField = find.byKey(new Key('email'));
await tester.enterText(emailField, 'some@some.some');
Finder passwordField = find.byKey(Key("password"));
await tester.enterText(passwordField, 'some');
// tap on the login button
Finder loginButton = find.byKey(new Key('login'));
await tester.tap(loginButton);
// 'pump' the tester again. This causes the widget to rebuild
await tester.pump();
//sleep(const Duration(seconds:2));
// await tester.pump();
//find validation text on SnackBar
expect(find.text("Invalid email or password"), findsOneWidget);
}, createHttpClient: createMockHttpClient);
我的问题是-如何实现MockHttpClient,以便可以针对3和4个方案发送正确的API响应。我可以在此方案中从真实api获得json答案。 在上面我发布的链接中,有针对性地针对NetworkImage的情况实现了createMockHttpClient的实现。
答案 0 :(得分:0)
我还无法使runZoned
和createHttpClient
一起工作。
我用
setUp(() {
HttpOverrides.global = TestHttpOverrides({
'www.example.com/dummy.png':
dummyAvatarImageData,
imageThumbUrl: dummyPngImageData,
});
});
与
class TestHttpOverrides extends HttpOverrides {
TestHttpOverrides(this.data);
final Map<Uri, List<int>> data;
@override
HttpClient createHttpClient(SecurityContext context) =>
createMockImageHttpClient(context, data);
}