gpt4 book ai didi

flutter - Dart/Flutter Web 单元测试错误 : Error: Not found: 'dart:html'

转载 作者:行者123 更新时间:2023-12-02 10:50:07 31 4
gpt4 key购买 nike

我正在开发 Flutter Web 应用程序,但在运行测试时遇到问题。

Flutter 1.7.8+hotfix.4 • channel stable • git@github.com:flutter/flutter.git
Framework • revision 20e59316b8 (9 weeks ago) • 2019-07-18 20:04:33 -0700
Engine • revision fee001c93f
Tools • Dart 2.4.0

这是 pubspec.yaml:

name: web_flutter
description: An app built using Flutter for web

environment:
# You must be using Flutter >=1.5.0 or Dart >=2.3.0
sdk: '>=2.3.0-dev.0.1 <3.0.0'

dependencies:
flutter_web: any
flutter_web_ui: any
provider: any
rxdart: ^0.22.0
http: ^0.12.0+2
json_annotation: ^2.4.0
intl: 0.15.8


dev_dependencies:
build_runner: ^1.4.0
build_web_compilers: ^2.0.0
pedantic: ^1.0.0
json_serializable: ^3.0.0
test: any

flutter:
uses-material-design: true

dependency_overrides:
flutter_web:
git:
url: https://github.com/flutter/flutter_web
path: packages/flutter_web
flutter_web_ui:
git:
url: https://github.com/flutter/flutter_web
path: packages/flutter_web_ui
provider:
git:
url: https://github.com/kevmoo/provider
ref: flutter_web

我编写了几个测试,当我在 IDE 终端 (VS Code) 或终端应用程序中运行 pub run test 时,这些测试都通过了。

我遇到问题的测试需要从项目中导入一些包。完成此测试后,我会收到错误,并且其他两个测试不会运行。我还没有找到任何可以解决问题的东西。

这是错误消息:

pub run test                                                                                         MyMac@MyMac
00:06 +0 -1: loading test/service_test.dart [E]
Failed to load "test/service_test.dart":
Unable to spawn isolate: file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/ui.dart:12:8: Error: Not found: 'dart:html'
import 'dart:html' as html;
^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/engine.dart:11:8: Error: Not found: 'dart:html'
import 'dart:html' as html;
^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web/lib/src/services/asset_bundle.dart:7:8: Error: Not found: 'dart:html'
import 'dart:html' show HttpRequest;
^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/engine.dart:12:8: Error: Not found: 'dart:js'
import 'dart:js' as js;
^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/engine.dart:13:8: Error: Not found: 'dart:js_util'
import 'dart:js_util' as js_util;
^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/ui/compositing.dart:20:9: Error: Type 'html.Element' not found.
final html.Element webOnlyRootElement;
^^^^^^^^^^^^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/engine.dart:177:37: Error: Type 'html.NodeTreeSanitizer' not found.
class _NullTreeSanitizer implements html.NodeTreeSanitizer {
^^^^^^^^^^^^^^^^^^^^^^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/engine.dart:179:21: Error: Type 'html.Node' not found.
void sanitizeTree(html.Node node) {}
^^^^^^^^^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/engine/bitmap_canvas.dart:26:9: Error: Type 'html.Element' not found.
final html.Element rootElement = html.Element.tag('flt-canvas');
^^^^^^^^^^^^
file:///Users/MyMac/.pub-cache/git/flutter_web-c04fb502b842859de07e36954a9390465a5426c0/packages/flutter_web_ui/lib/src/engine/bitmap_canvas.dart:28:3: Error: Type 'html.CanvasElement' not found.
html.CanvasElement _canvas;
^^^^^^^^^^^^^^^^^^
00:06 +0 -1: Some tests failed.

如果我注释掉这个新测试,错误仍然存​​在。如果我注释掉测试和相关导入,则其余两个测试将运行并通过。

这是测试文件(我将有问题的代码注释掉,以便您更容易看到 - 我希望)。

import 'package:test/test.dart';
import 'package:http/http.dart';
import 'package:http/testing.dart';
import 'dart:convert';
import 'package:web_flutter/services/service.dart';
// These are the package imports that cause errors:
import 'package:web_flutter/model/model.dart';
import 'package:web_flutter/data/tenant_view_model.dart';

void main(){

test("getSubmission returns ResponseData{}", () async {
// Arrange: setup the test
final _service = Service();

_service.httpClient = MockClient((request) async {
final responseData = {
"id": "some_id",
"state": "processed",
"test": true,
"editable": false,
"expires_at": "2019-09-19T03:40:22Z",
"processed_at": "2019-09-12T03:40:22Z",
"batch_id": "",
"download_url": "downloadURl.com",
"permanent_download_url": "permanentdownloadURL.com"
};
return Response(json.encode(responseData),200);
});

// Act
final response = await _service.getSubmission("submissionID");

// Assert
expect(response.download_url, "downloadURL.com");
});
test("generateForm returns SubmissionResponse{}", () async {
// Arrange: setup the test
final _service = Service();

_service.httpClient = MockClient((request) async {
final submissionResponse = {
"status": "success",
"submission": {
"id": "some_id",
"state": "pending",
"test": false,
"editable": false,
"expired": false,
"expires_at": null,
"metadata": {
"foo": 123,
"bar": "baz"
},
"processed_at": null,
"batch_id": null,
"data_requests": [],
"download_url": null,
"permanent_download_url": null
}
};
return Response(json.encode(submissionResponse),200);
});

// Act
final response = await _service.generateForm(42, "templateID");

// Assert
expect(response.submission.id, "some_id");
});

test('Tenant View Model generateForm returns tenantVM.submission.submission.id', () async {
// Arrange
final _service = Service();
Tenant tenant;
tenant.id = 42;

_service.httpClient = MockClient((request) async {
final submissionResponse = {
"status": "success",
"submission": {
"id": "some_id",
"state": "pending",
"test": false,
"editable": false,
"expired": false,
"expires_at": null,
"metadata": {
"foo": 123,
"bar": "baz"
},
"processed_at": null,
"batch_id": null,
"data_requests": [],
"download_url": null,
"permanent_download_url": null
}
};
return Response(json.encode(submissionResponse),200);
});
TenantViewModel tenantVM = TenantViewModel(tenant, _service);

// Act
await tenantVM.generateForm("templateID");

// Assert
expect(tenantVM.submission.submission.id, "some_id");
});
}

这个类具有我正在尝试测试的方法 (generateForm())。

import 'package:flutter_web/cupertino.dart';
import 'package:web_flutter/model/model.dart';
import 'package:web_flutter/services/service.dart';

class TenantViewModel with ChangeNotifier {
Tenant _tenant;
Property _property;
Service _service;
SubmissionResponse _submission;
ResponseData _responseData;

TenantViewModel(this._tenant, this._service);

bool get isNew => _tenant.id == null;

set tenant(Tenant tenant) {
if (_tenant != tenant) {
_tenant = tenant;
notifyListeners();
}
}

Tenant get tenant => _tenant;

set property(Property property) {
_tenant.propertyId = property.id;
notifyListeners();
}

Property get property => _property;

set submission(SubmissionResponse submission) {
if (_submission != submission) {
_submission = submission;
notifyListeners();
}
}

SubmissionResponse get submission => _submission;

set responseData(ResponseData responseData) {
if (_responseData != responseData) {
_responseData = responseData;
notifyListeners();
}
}

ResponseData get responseData => _responseData;

Future generateForm(String templateID) async {
SubmissionResponse submission;

submission = await _service.generateForm(_tenant.id, templateID);
this.submission = submission;

notifyListeners();
}

Future getSubmission(String submissionID) async {
ResponseData responseData;

responseData = await _service.getSubmission(submissionID);
this.responseData = responseData;

notifyListeners();
}

Future save() async {
Tenant updatedTenant;
if (tenant.isNew) {
updatedTenant = await _service.createTenant(_tenant);
this.tenant = updatedTenant;
} else {
updatedTenant = await _service.updateTenant(tenant);
this.tenant = updatedTenant;
}
notifyListeners();
}

Future refresh() async {
if (isNew) {
return;
}
var updatedTenant = await _service.getTenant(_tenant.id);
if (_tenant.propertyId != null) {
_property = await _service.getProperty(_tenant.propertyId);
}
_tenant = updatedTenant;
notifyListeners();
}
}

我尝试过:在测试文件中导入 'package:flutter_test/flutter_test.dart'; 并将其添加到 pubspec.yaml 中:

  flutter_test:
sdk: flutter

这些会导致各自的错误,因为我使用的是 Flutter Web,而不是 Flutter。谁能看出我哪里出错了?

我知道我正在进行的测试可能是错误的,但我什至无法达到让它运行并失败的地步。

最佳答案

我在开发移动应用程序时遇到了类似的问题,但事实证明我不小心导入了包dart.html。我刚刚将其删除,并且能够运行该程序。

关于flutter - Dart/Flutter Web 单元测试错误 : Error: Not found: 'dart:html' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57982493/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com