felangel / felangel/mocktail

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

未关闭
#168 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
question waiting for response
主要语言
Dart
星标
702
派生
88
PR 合并指标
30 天内没有已合并 PR

描述

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);
});

});
}

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。