在Flutter中测试kIsWeb常量

6
在我的代码中,我有一个名为lookup的方法: lookup.dart
Future<http.Response> httpLookup(String address) {
    return kIsWeb
        ? _httpClient.get(address)
        : _httpClient.get(
            Uri.https(address, ''),
          );
  }

我如何在单元测试中测试kIsWeb常量?以下是我尝试过的内容,但代码覆盖率不够。

lookup_test.dart

@TestOn('browser')
void main (){
test('shoud test lookup', () {
    InternetLookup lookup = InternetLookup();
    when(mockInternetLookup.httpLookup(any))
        .thenAnswer((realInvocation) async => http.Response('success', 200));
    lookup.httpLookup('www.google.com');
  });
}
3个回答

5

您可以使用接口并进行模拟。

abstract class IAppService {
  bool getkIsWeb();
}

class AppService implements IAppService {
  bool getkIsWeb() {
    return kIsWeb;
  }
}

在测试中,您必须像以下这样使用

class MockAppService extends Mock implements IAppService {}

...

when(appService.getkIsWeb())
        .thenAnswer((realInvocation) => true);

2
另一种方法是在Web环境中实际运行它。
flutter test --platform chrome

您也可以添加。
@TestOn('browser')

在你的测试文件顶部加上代码,这样只有在平台是浏览器时才会运行你的测试。
查看TestOn和它的README

0
另一种方法是添加一个可选参数,并用 @visibleForTesting 注释来覆盖 kIsWeb 常量:
Future<http.Response> httpLookup(String address, { @visibleForTesting bool isTestingForWeb = false}) {
  return kIsWeb || isTestingForWeb ? ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接