我要测试的是: 用户点击一个按钮,小吃栏显示五秒钟。
这是脚手架及其钥匙:
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(debugLabel: "scaffoldState");
...
builder: (context, viewModel) => Scaffold(
key: _scaffoldKey,
然后是按钮和快餐栏的代码:
child: FlatButton(key: Key('loginButton'), onPressed: () {
validate();
...
validate() {
// FormState object can be used to save, reset, and validate
// every FormField that is a descendant of the associated Form.
final FormState form = _formKey.currentState;
if (form.validate()) {
form.save();
form.reset();
//implementation of the snackBar:
_scaffoldKey.currentState.showSnackBar(new SnackBar(
duration: new Duration(seconds: 5)
...
我正在尝试以这种方式测试这种行为(我也在使用Flutter redux):
void main(){
final store = Store<AppState>(reducer, initialState: AppState.initialState());
testWidgets("MaterialApp local", (WidgetTester tester) async{
await tester.pumpWidget(new StoreProvider(
store: store,
child: MaterialApp(
home: LoginView(),
)));
await tester.pumpAndSettle();
await tester.press(find.byKey(Key("loginButton")));
expect();
我不知道该放些什么。我试图使用find.ByKey(Key))获取GlobalKey并搜索debugLabel,但是它似乎不起作用。我从两天后开始尝试,但是找不到出路。
答案 0 :(得分:1)
回答这个问题可能为时已晚,但是由于这是Google在输入“ Flutter test Snackbar”时的第二个结果,因此我只给我两分钱:
实际上非常简单。不要将Snackbar视为完全不同的东西,仅仅是因为它只在底部停留了几秒钟。最后,Snackbar只是另一个小部件。
记住这一点,您可以按以下步骤进行测试:
testWidgets("MaterialApp local", (WidgetTester tester) async{
...
// Test if the Snackbar appears
expect(find.byType(SnackBar), findsOneWidget);
// Test if it contains your text
expect(find.text('TAPS!'), findsOneWidget);
});
答案 1 :(得分:0)
我实际上满足了与您相同的条件,而我所做的只是将文本作为小吃栏的内容。
用于显示小吃店,我使用的代码是
scaffoldKey.currentState.showSnackBar(SnackBar(content: Text("TAPS!"),));
}, "SEE ALL", backgroundColor: Colors.red, textColor: Colors.blue)
,我希望找到内容与输入内容相同的文本,并添加findsOneWidget。
expect(find.text("TAPS!"), findsOneWidget);