I want to unit test api and I followed this tutorial to achieve it but I got a ridiculous error.
I have been struggling with this issue whole day!
Here is explanation:
I need to have mokito and also api_client.g file in my project.
Whenever I try to generate mokito file with this command flutter packages pub run build_runner build --delete-conflicting-outputs the mokito class is generated but my api_client.g.dart disappears and is not regenerated.
I used to be able to genrate api_clien.g.dart file using this command:
flutter pub run build_runner build
My pubspec.yaml
name: app_store
description: A new Flutter project.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
sdk: ">=2.15.1 <3.0.0"
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_riverpod: ^1.0.3
cupertino_icons: ^1.0.2
shared_preferences: ^2.0.13
built_value: ^8.1.4
json_annotation: ^4.4.0
dio: ^4.0.4
package_info_plus: ^1.4.2
cached_network_image: ^3.2.0
url_launcher: ^6.0.18
intl: ^0.17.0
flutter_svg: ^1.0.3
lottie: ^1.2.1
pin_code_fields: ^7.3.0
image_cropper: ^2.0.3
image_picker: ^0.8.5+3
file_picker: ^4.6.1
device_info_plus: ^4.0.0
disk_space: ^0.2.1
flutter_rating_bar: ^4.0.1
device_apps: ^2.2.0
path_provider: 2.0.9
speech_to_text: ^5.6.0
app_installer: ^1.1.0
downloads_path_provider_28: ^0.1.2
permission_handler: ^8.3.0
mockito: ^5.3.1
build_runner: ^2.2.1
# freezed: ^2.0.3
http: ^0.13.4
flutter_lints: ^1.0.0
json_serializable: ^6.1.4
uni_links: ^0.5.1
dev_dependencies:
integration_test:
sdk: flutter
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
generate: true
assets:
- assets/icons/
- assets/images/
- assets/animations/
fonts:
- family: iran_sans_x
fonts:
- asset: assets/fonts/iran_sans_x_ultra_light.otf
weight: 100
- asset: assets/fonts/iran_sans_x_thin.otf
weight: 200
- asset: assets/fonts/iran_sans_x_light.otf
weight: 300
- asset: assets/fonts/iran_sans_x_regular.otf
weight: 400
- asset: assets/fonts/iran_sans_x_medium.otf
weight: 500
- asset: assets/fonts/iran_sans_x_semi_bold.otf
weight: 600
- asset: assets/fonts/iran_sans_x_bold.otf
weight: 700
- asset: assets/fonts/iran_sans_x_extra_bold.otf
weight: 800
- asset: assets/fonts/iran_sans_x_black.otf
weight: 900
- family: DanaFaNum
fonts:
- asset: assets/fonts/DanaFaNum-UltraLight.ttf
weight: 100
- asset: assets/fonts/DanaFaNum-Thin.ttf
weight: 200
- asset: assets/fonts/DanaFaNum-Light.ttf
weight: 300
- asset: assets/fonts/DanaFaNum-Regular.ttf
weight: 400
- asset: assets/fonts/DanaFaNum-Medium.ttf
weight: 500
- asset: assets/fonts/DanaFaNum-Bold.ttf
weight: 600
- asset: assets/fonts/DanaFaNum-DemiBold.ttf
weight: 700
- asset: assets/fonts/DanaFaNum-ExtraBold.ttf
weight: 800
- asset: assets/fonts/DanaFaNum-Black.ttf
weight: 900
My Mokito class:
import 'package:app_store/data/model/responseModel/login_with_mobile_rm.dart';
import 'package:app_store/main.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart' as http;
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'api_test.mocks.dart';
final httpProvider = Provider<http.Client>((ref) {
return http.Client();
});
@GenerateMocks([http.Client])
void main() {
testWidgets('200 response increments', (WidgetTester tester) async {
final client = MockClient();
when(client.get(Uri.parse('https://httpstat.us/200'))).thenAnswer(
(value) async {
return http.Response(LoginWithMobileRm().toJson().toString(), 200);
},
);
await tester.pumpWidget(
ProviderScope(
overrides: [
httpProvider.overrideWithValue(client),
],
child: const MyApp(),
),
);
expect(1, 1);
});
}
My api_client:
part 'api_client.g.dart';
abstract class ApiClient {
factory ApiClient(Dio dio, AppPreferencesHelper appPreferencesHelper,
{required String baseUrl}) = _ApiClient;
Future<BaseResponseModel<LoginWithMobileRm>> mobileLogin(
Map<String, String> map,
BuildContext context,
);