You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart异步请求测试脚本执行失败问题排查

Flutter测试异步网络请求失败:DigitalCardModel实例不匹配

现有业务代码可正常运行,但编写的Flutter测试脚本无法完成执行。测试脚本中调用异步网络请求获取DigitalCardModel,第一个测试就报错,提示预期与实际的DigitalCardModel实例不匹配,实际返回空实例,疑似未等待异步请求完成。

测试脚本

import 'package:members_info/models/digital_card_model.dart';
import 'package:members_info/network/network_digital_card.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  DigitalCardModel testAndrew = DigitalCardModel.fromJson({
"name":"Andrew",
    "phone": "",
    "expired": "Y",
    "lapsing": "Y",
    "externalid": "29033"
  });

  DigitalCardModel testSarah = DigitalCardModel.fromJson({
"name":"Sarah",
    "phone": "",
    "expired": "N",
    "lapsing": "N",
    "externalid": "13"
  });

  group("Test DigitalCardModel request", () {
    test('Andrew', () async {
      DigitalCardModel digitalCard =
          await NetworkDigitalCard().getDigitalCard('andrew@acme.com');

      expect(digitalCard, testAndrew);
    });
    test('Sarah', () async {
      DigitalCardModel digitalCard =
          await NetworkDigitalCard().getDigitalCard('sarah@acme.com');

      expect(digitalCard, testSarah);
    });
  });
}

测试错误信息

Exception has occurred.
TestFailure (Expected: <Instance of 'DigitalCardModel'>
Actual: <Instance of 'DigitalCardModel'>
)

运行测试时出现上述错误,且无法进入第二个测试。

应用中调用网络请求的代码

late Future<DigitalCardModel> digitalCard =
      NetworkDigitalCard().getDigitalCard(_email);

网络请求代码

import 'package:dio/dio.dart';
import 'package:members_info/extensions/string.dart';
import 'package:members_info/models/digital_card_model.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

class NetworkDigitalCard {
  String getUrl(email) =>
      'https://acme.com/jsonCardDetails?email=$email';

// 供页面调用的方法
  Future<DigitalCardModel> getDigitalCard(String email) async {
    if (!email.isValidEmail) {
      return DigitalCardModel(
          
          name: "Invalid Email",
          phone: "",
          expired: "",
          lapsing: "",
          externalid: 0);
    }
    try {
      Response<dynamic> response = await Dio().get(getUrl(email));
      if (response.data['unknown'] == true) {
        return DigitalCardModel(externalid: response.data['externalid']);
      }

      // 返回有效数据
      return DigitalCardModel.fromJson(response.data);
    } catch (exception, stackTrace) {
      await Sentry.captureException(
        exception,
        stackTrace: stackTrace,
      );
    }
    return DigitalCardModel();
  }

  Future<DigitalCardModel> refreshContent(String email) async {
    return getDigitalCard(email);
  }
}

Flutter环境信息

Flutter (Channel stable, 3.10.6, on macOS 13.5 22G74 darwin-x64, locale en-AU)
    • Flutter version 3.10.6 on channel stable at /Users/sarah/development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision f468f3366c (9 weeks ago), 2023-07-12 15:19:05 -0700
    • Engine revision cdbeda788a
    • Dart version 3.0.6
    • DevTools version 2.23.1

内容的提问来源于stack exchange,提问作者Sarah K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:01:27