Honey Logo banner

Honey 是一个用于 Flutter 应用的端到端测试框架。它旨在非常易于设置和使用。HoneyTalk 测试语言写起来和读起来都很自然。它足够强大,可以让你轻松地编写复杂的测试。

让我们从一个简单的测试开始

Counter App Sample

为了像真实用户一样测试应用,Honey 依赖于可访问性树来查找屏幕上的小部件。这使得测试设计者可以编写测试,而无需担心应用的实现细节,甚至无需了解 Flutter。

设置

Honey 的设置非常简单。只需将以下内容添加到您的 pubspec.yaml

dependencies:
  honey: ^0.1.0

然后运行 flutter pub get 来安装该包。

唯一剩下要做的就是在您的 main() 函数中初始化 HoneyWidgetsBinding。我们建议使用 –dart-defines 来仅为测试构建启用 Honey。

const kIsHoney = bool.fromEnvironment('HONEY');

void main() {
  if (kIsHoney) {
    HoneyWidgetsBinding.ensureInitialized();
  }

  runApp(MyApp());
}

然后,您可以为您的 launch.json 添加一个启动配置,以启用 Honey 运行您的应用。

{
  "name": "Honey Mode",
  "request": "launch",
  "type": "dart",
  "program": "lib/main.dart",
  "args": ["--dart-define", "HONEY=true"]
}

如果您想使用 VSCode 扩展,请始终通过 VSCode 运行您的应用。

编写测试

HoneyTalk 是一种完整的编程语言,功能非常强大。它默认是异步的,因此您无需使用 delaywait 来等待动画完成。让我们看一个更高级的示例

ClickUp login Sample

Honey 还理解引用和上下文,这使得在复杂应用中查找小部件变得容易。这里有一些例子

References Sample

当然,Honey 允许您在测试中使用条件(尽管我们建议尽量保持测试简单)

Conditions Sample

可访问性覆盖层

Honey 依赖于可访问性树来查找屏幕上的小部件。为了使测试可靠且有趣,您应该确保您的应用是可访问的。Honey 配备了“Honey 覆盖层”来帮助您做到这一点。您无需配置任何内容,只需启用 Honey 运行您的应用,您就会在应用顶部看到该覆盖层。它允许您检查小部件并查看它们的可访问性信息。

Honey VSCode 扩展

Honey 配备了一个 VSCode 扩展,允许您直接从编辑器运行测试。它还提供语法高亮。

安装 VSCode 扩展后,只需创建一个 your_test.honey 文件,然后在测试模式下运行您的 Flutter 应用。您可以从 VSCode 的“运行和调试”面板或“测试”树中运行测试。

Honey VSCode Extension

扩展 HoneyTalk

在某些时候,您可能希望从您的 HoneyTalk 测试中调用 Dart 函数,例如注入登录令牌或验证 API 响应。HoneyTalk 是完全模块化的,允许您覆盖或扩展语言中的每个函数。这是一个定义自定义登录函数的示例

import 'package:honey/honey.dart';

Future<EvaluatedExpr> honeyLogin(HoneyContext ctx, Map<String, Expr> params) {
  final email = await ctx.eval(params['email']);
  final password = await ctx.eval(params['password']);

  // do some login logic here

  return val(true);
}

然后,您可以通过 HoneyTalk 调用该函数: login with email "[email protected]" and password "notMyPassword"

您还可以覆盖内置的 Honey 函数。您可以覆盖 F.add 函数来修改加法的工作方式。

ClickUp 开源?

ClickUp Logo

通过提高世界生产力来节省人们的时间。

我们正在寻找经验丰富的开发人员。

加入我们,成为伟大事业的一部分!加入我们

许可证

Copyright 2022 ClickUp

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://apache.ac.cn/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

GitHub

查看 Github