felangel / felangel/mocktail

Flutter Secure Storage Mock Throws type 'Null' is not a subtype of type 'Future<String?>'

Open
#168 4 comments 0 reactions 0 assignees View on GitHub
question waiting for response
Dominant language
Dart
Stars
702
Forks
88
PR merge metrics
No merged PRs in 30d

Description

Hello, could someone suggest me an idea how to solve this?
When im trying to mock flutter secure storage i get this error " type 'Null' is not a subtype of type 'Future "

-This is my storage

import 'package:flutter_secure_storage/flutter_secure_storage.dart';

abstract class IStorage {
Future saveData(String value, String key);

Future getId(String key);
}

class MyStorage implements IStorage {
MyStorage(this._storage);
final FlutterSecureStorage _storage;
@override
Future getId(String key) async {
return await _storage.read(key: key) ?? 'No data founded';
}

@override
Future saveData(String value, String key) async {
await _storage.write(key: key, value: value);
}
}

-My Service

import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:fixed/shared/storage.dart';
import 'package:flutter/cupertino.dart';

class ApiService {
final String _baseURL = 'https://jsonplaceholder.typicode.com/';
Dio _dio = Dio(BaseOptions());
final IStorage _storage;

ApiService(this._storage, {Dio? dio}) {
_dio = dio ?? Dio();
_dio.options.baseUrl = _baseURL;
}

Future get() async {
String id = await _storage.getId('id');
final response = await _dio.get('${_baseURL}posts/$id');
debugPrint(json.encode(response.data));
return json.encode(response.data);
}
}

My Test File

import 'package:dio/dio.dart';
import 'package:fixed/api/api_service.dart';
import 'package:fixed/shared/storage.dart';
import 'package:fixed/store/store1.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'package:mocktail/mocktail.dart';

class MockStorage extends Mock implements IStorage {}

class MockStorage2 extends Mock implements MyStorage {}

class MockFlutterSecureStorage extends Mock implements FlutterSecureStorage {}

void main() {
final dio = Dio();
final dioAdapter = DioAdapter(dio: dio, matcher: const UrlRequestMatcher());
late ApiService service;
late MockFlutterSecureStorage mockSecureStorage;

setUp(() {
mockStorage = MockStorage();
mockSecureStorage = MockFlutterSecureStorage();
dio.httpClientAdapter = dioAdapter;
service = ApiService(dio: dio, MyStorage(mockSecureStorage));
});

void mockData() {
dioAdapter.onGet('https://jsonplaceholder.typicode.com/posts/1', (request) {
return request.reply(200, {'data': 'sucessfull'});
});
}

void mockGetId() {
when(() => mockStorage.getId('id'))
.thenAnswer((invocation) => Future.value('1'));
}

group('Test Service', () {
test('Test endpoint', () async {
//IT THROW ERROR
when(() => mockSecureStorage.read(key: 'íd')).thenAnswer((_) async => '');
final data = await service.get();
expect(data, equals('{"data":"sucessfull"}'));
verify(() => mockSecureStorage.read(key: 'id')).called(1);
});

});
}

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.