在Dart/Flutter + MobX中,要测试一个方法是否被调用,可以使用jest
和mobx
的测试工具。以下是一个简单的示例,展示了如何测试一个方法是否被调用:
- 安装依赖:
jest
:用于测试mobx
:用于状态管理mobx-react
:用于将MobX与React(或Flutter)集成mobx-react-lite
:用于测试
npm install --save-dev jest mobx mobx-react-lite
- 创建一个简单的MobX store:
// store.dart import 'package:mobx/mobx.dart'; class MyStore { @observable int count = 0; @action void increment() { count++; } }
- 创建一个简单的Flutter组件:
// main.dart import 'package:flutter/material.dart'; import 'store.dart'; class MyApp extends StatelessWidget { final MyStore store = MyStore(); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('MobX Test'), ), body: Center( child: ElevatedButton( onPressed: store.increment, child: Text('Increment'), ), ), ), ); } }
- 编写测试用例:
// store_test.dart import 'package:flutter_test/flutter_test.dart'; import 'package:mobx/mobx.dart'; import 'package:mobx-react-lite/flutter_mobx.dart'; import 'package:flutter/material.dart'; import 'store.dart'; void main() { test('increment method should be called', () { // 创建一个MyStore实例 final store = MyStore(); // 使用jest.spyOn监视increment方法 final incrementSpy = jest.spyOn(store, 'increment'); // 创建一个Flutter widget final widget = MaterialApp( home: Scaffold( appBar: AppBar( title: Text('MobX Test'), ), body: Center( child: ElevatedButton( onPressed: store.increment, child: Text('Increment'), ), ), ), ); // 渲染widget runApp(widget); // 触发按钮点击事件 find.byType(ElevatedButton).first.tap(); // 验证increment方法是否被调用 expect(incrementSpy).toHaveBeenCalled(); }); }
在这个示例中,我们创建了一个简单的MobX store和一个Flutter组件。然后,我们编写了一个测试用例,使用jest.spyOn
监视increment
方法,并验证它是否被调用。