Я хочу проверить моего провайдера с плагином mockito, но есть проблема с, как я понимаю, с заголовками.
показывает ноль когда я делаю печать (ответ)
если я удалю заголовки из API
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Authorization': 'Bearer $token',
},
тест работает нормально, но с заголовками:
NoSuchMethodError: The getter 'statusCode' was called on null.
Receiver: null
Tried calling: statusCode
dart:core Object.noSuchMethod
package:mba/resources/providers/post_provider.dart 38:20 PostProvider.fetchPosts
===== asynchronous gap ===========================
dart:async _AsyncAwaitCompleter.completeError
package:mba/resources/providers/post_provider.dart PostProvider.fetchPosts
===== asynchronous gap ===========================
dart:async _asyncThenWrapperHelper
package:mba/resources/providers/post_provider.dart PostProvider.fetchPosts
test/resources/providers/post_provider_test.dart 46:39 main.<fn>.<fn>
Поставщик:
import 'package:http/http.dart' as http;
import 'package:mba/env.dart';
import 'package:mba/core/models/post_model.dart';
class PostProvider {
final http.Client client;
final String _api = API;
// Map<String, List<Post>> _postsList = Map();
PostProvider(this.client);
Future<Map<String, List<Post>>> fetchPosts(String token) async {
final response = await client.get(
'${_api}posts',
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Authorization': 'Bearer $token',
},
);
print('-------------');
print(response);
print(response.statusCode);
print(response.body);
//todo: decode and mapping
if (response.statusCode == 200) {
return Map();
} else {
throw 'xxxx';
}
}
тестовый файл:
import 'dart:io';
import 'package:mba/resources/providers/post_provider.dart';
import 'package:mockito/mockito.dart';
import 'package:http/http.dart' as http;
import 'package:flutter_test/flutter_test.dart';
import 'package:matcher/matcher.dart';
class MockClient extends Mock implements http.Client {}
void main() {
String fixture(String name) =>
File('test/fixtures/posts/$name.json').readAsStringSync();
MockClient mockClient;
PostProvider dataSource;
setUp(() {
mockClient = MockClient();
dataSource = PostProvider(mockClient);
});
group('searchVideos', () {
test(
'returns YoutubeSearchResult when the call completes successfully',
() async {
when(
mockClient.get(
argThat(
startsWith('http://localhost:55005/api'),
),
),
).thenAnswer(
(_) async => http.Response(
fixture('posts'),
200,
headers: {'content-type': 'application/json; charset=utf-8'},
),
);
var result = await dataSource.fetchPosts('resocoder');
print(result);
},
);
});
}