【问题标题】:How to get current variant value in Flutter widget test如何在 Flutter 小部件测试中获取当前变量值
【发布时间】:2021-09-14 08:53:48
【问题描述】:

假设我有一个枚举来表示一些颜色;

enum MyColor { blue, red, green }

不要重复测试用例我可以写一个TestVariant,如下所示;

class ColorVariant extends TestVariant<MyColor> {
  @override
  String describeValue(MyColor value) {
    return value.toString();
  }

  @override
  Future<Object?> setUp(MyColor value) {
    // Do setup here
    return Future.value(null);
  }

  @override
  Future<void> tearDown(MyColor value, covariant Object? memento) {
    // Do teardown here
    return Future.value();
  }

  @override
  Iterable<MyColor> get values => MyColor.values;
}

下面终于有了对应的testWidget函数;

testWidgets(
  'Should reflect Color',
  (tester) async {
    // Test block here..
  },
  variant: ColorVariant(),
);

那么实际的问题是,如何在测试块中获取相关的MyColor

【问题讨论】:

    标签: flutter widget-test-flutter


    【解决方案1】:

    解决方案

    1. 将属性currentValue 添加到ColorVariant 类并将其设置为setUp
    2. 创建它的实例并在testWidgets 正文中访问它。

    完整代码

    enum MyColor { blue, red, green }
    
    final variant = ColorVariant()
    
    class ColorVariant extends TestVariant<MyColor> {
      /// Returns the value currently under test.
      MyColor? get currentValue => _currentValue;
      MyColor? _currentValue;
    
      @override
      String describeValue(MyColor value) {
        return value.toString();
      }
    
      @override
      Future<MyColor> setUp(MyColor value) async => _currentValue = value;
    
      @override
      Future<void> tearDown(MyColor value, covariant Object? memento) {
        // Do teardown here
        return Future.value();
      }
    
      @override
      Iterable<MyColor> get values => MyColor.values;
    }
    
    testWidgets(
      'Should reflect Color',
      (tester) async {
         // access via currentValue
        final current = variants.currentValue!.name;
    
      },
      variant: ColorVariant(),
    );
    

    推荐

    或者如果您没有任何其他配置,例如setUptearDown,则可以使用ValueVariant

    enum MyColor { blue, red, green }
    
    final variants = ValueVariant({...MyColor.values});
    

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 1970-01-01
      • 2019-05-01
      • 2019-08-07
      • 2018-05-26
      • 2022-06-24
      • 2016-02-14
      • 2019-10-31
      • 2019-02-25
      相关资源
      最近更新 更多