Flutter:测试共享的首选项

时间:2018-10-13 14:01:47

标签: unit-testing testing dart flutter

我正在尝试测试此功能:

 void store(String x, String y) async {
    Map<String, dynamic> map = {
      'x': x,
      'y': y,
    };
    var jsonString = json.encode(map);
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('fileName', jsonString);
  }

我看到我可以用

填充共享的首选项
const MethodChannel('plugins.flutter.io/shared_preferences')
  .setMockMethodCallHandler((MethodCall methodCall) async {
    if (methodCall.method == 'getAll') {
      return <String, dynamic>{}; // set initial values here if desired
    }
    return null;
  });

但是我不知道如何使用,特别是在我的情况下。

2 个答案:

答案 0 :(得分:1)

您可以使用SharedPreferences.setMockInitialValues进行测试

test('Can Create Preferences', () async{

    SharedPreferences.setMockInitialValues({}); //set values here
    SharedPreferences pref = await SharedPreferences.getInstance();
    bool working = false;
    String name = 'john';
    pref.setBool('working', working);
    pref.setString('name', name);


    expect(pref.getBool('working'), false);
    expect(pref.getString('name'), 'john');
  });

答案 1 :(得分:1)

谢谢nonybrighto的帮助。

我在尝试使用以下方法在共享首选项中设置初始值时遇到了麻烦:

SharedPreferences.setMockInitialValues({
  "key": "value"
});

似乎shared_preferences插件期望键具有前缀flutter.。因此,如果使用上述方法进行模拟,则需要将其添加到您自己的密钥中。

有关此证据,请参见此处的第20和33行: https://github.com/flutter/plugins/blob/master/packages/shared_preferences/lib/shared_preferences.dart