начинающий программист, который только начал изучать флаттер и пытался исследовать тестирование флаттера. Ниже приведен мой код userInfoProvider:
import 'package:flutter/cupertino.dart';
class UserInfoProvider with ChangeNotifier{
String _username;
String _userRole;
getUsername() => _username;
getUserRole() => _userRole;
setUsername(String username){
_username = username;
notifyListeners();
}
setUserRole(String userRole){
_userRole = userRole;
notifyListeners();
}
getCurrentUserInformation(String uid) async {
Query q = await Firestore.instance
.collection('users')
.document(uid)
.get()
.then((DocumentSnapshot ds) {
setUsername(ds.data['userName']);
setUserRole(ds.data['userRole']);
return;
});
}
}
У меня есть виджет домашней страницы, который имеет свойство Uid. Этот виджет использует этот uid для идентификации из коллекции «users» в firestore для установки имени пользователя и userRole my UserInfoProvider.
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'UserInfoProvider.dart';
class HomePage extends StatefulWidget {
final String uid;
HomePage(this.uid);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
void afterFirstLayout(BuildContext context) async {
var user = Provider.of<UserInfoProvider>(context);
await user.getCurrentUserInformation(widget.uid);
}
@override
Widget build(BuildContext context) {
return Container();
}
}
Виджет SecondPage имеет 2 текстовых виджета, которые отображают имя пользователя и userRole из методов get UserInfoProvider.
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'UserInfoProvider.dart';
class SecondPage extends StatefulWidget {
@override
_SecondPageState createState() => _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
@override
Widget build(BuildContext context) {
final user = Provider.of<UserInfoProvider>(context);
return Column(
children: <Widget>[
Text(user.getUsername()),
Text(user.getUserRole())
],
);
}
}
В таких сценариях как написать тест виджета, в котором я хотел бы протестировать виджет SecondPage, чтобы убедиться, что отображаемый текст (например, userRole) совпадает с тем, который имитируется UIDвстроили виджет HomePage? Ниже приведен мой тестовый код, который не проходит тест:
testWidgets("Test secondpage widget to display correct userRole", (WidgetTester tester) async{
final uid = "ekkMH1sKW1dN0r3ZTQGCngJS1cV2";
await tester.pumpWidget(ChangeNotifierProvider(
builder: (_) => UserInfoProvider(),
child: MaterialApp(
home: HomePage(uid)
)
));
await tester.pumpWidget(ChangeNotifierProvider(
builder: (_) => UserInfoProvider(),
child: MaterialApp(
home: SecondPage()
)
));
final UserRoleTextFinder = find.text("someUserRole");
expect(UserRoleTextFinder, findsOneWidget);
});
Я бы предположил, что у меня есть два экземпляра userInfoProvider, состояние которых на домашней странице не совпадает с состоянием SecondPage на основе моего тестового кода? В любом случае ценю любые советы для моего случая.