我正在构建一个任务/待办事项小部件。任务小部件是使用 ListTile
和 Checkbox
小部件实现的。
class _TaskListItemState extends State<TaskListItem> {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: _goToTaskScreen,
child: ListTile(
leading: Checkbox(
value: widget.task.isComplete, onChanged: _toggleTaskComplete),
title: Text(
widget.task.title,
style: TextStyle(
decoration: widget.task.isComplete
? TextDecoration.lineThrough
: null,
color: widget.task.isComplete ? Colors.grey : null),
),
),
);
}
void _goToTaskScreen() {...}
void _toggleTaskComplete(bool? value) {...});
}
}
我正在尝试测试小部件,如果任务完成,则小部件的文本样式装饰应该是删除线,否则正常。
testWidgets(
'if the isCompleted is true, then title text should be strikethrough',
(WidgetTester tester) async {
// Arrange
const testKey = ValueKey('my-key-1');
const testTitle = 'Demo title';
const testProjectID = 555;
final DateTime testDueDate = DateTime.now();
const testIsComplete = true;
final Task taskComplete = Task(
title: testTitle,
projectID: testProjectID,
dueDate: testDueDate,
isComplete: testIsComplete);
await tester.pumpWidget(MaterialApp(
home: Material(
child: TaskListItem(key: testKey, task: taskComplete),
),
));
final textFinder = find.byType(Text);
final textWidget = tester.firstWidget(textFinder);
expect(textWidget.style.decoration, TextDecoration.lineThrough);
});
应用在运行 flutter run
时运行良好。
但是这会在运行 flutter test
时引发错误:
est/widgets/task_list_item_test.dart:57:25: 错误:getter 'style' 没有为“Widget”类定义。
我知道我错过了一些东西,因为我只学习了一个多星期的颤振。你能帮我如何执行小部件测试来断言文本小部件样式。谢谢!