Flutter内联快照生成插件inline_snapshot的使用
Flutter内联快照生成插件inline_snapshot的使用
Inline Snapshot
这是一个支持Dart内联快照测试的库,灵感来源于 expect-test、rspec-inline-snapshot 和 Jest 等项目!
特性
- 执行内联快照测试
- 允许基于实际结果更新预期结果
什么是方便?
预期结果不是写入外部文件,而是存储在输入的同一位置。这使得验证输入和预期结果变得容易。由于测试可以自动更新,修改测试的唯一成本就是审查检测到的差异。
以下是一些可能使用内联快照测试的情况:
- 测试编程语言中的解析器结果(例如,AST)
- 测试代码格式化的输出
- 测试代码压缩器的输出
- 测试模板引擎的输出
- 测试序列化/反序列化过程的输出
- 测试数据转换或映射函数的输出
在这些情况下,预期结果可能是小的并且容易改变,内联快照测试允许你轻松更新预期结果,并在同一位置验证输入和输出。
开始使用
在你的 pubspec.yaml
文件中添加以下开发依赖项:
dev_dependencies:
inline_snapshot: ^1.0.2
使用方法
import 'package:test/test.dart';
import 'package:inline_snapshot/inline_snapshot.dart';
void main() {
tearDownAll(() async {
await Expect.apply();
});
group('A group of tests', () {
test('First Test', () {
var e = Expect();
// ^替换 "actual string" 当运行 `UPDATE_EXPECT=1 dart test`
e.eq("actual string");
});
});
}
在这个例子中,Expect
对象是空的。你可以通过运行以下命令来更新源代码中的预期结果:UPDATE_EXPECT=true dart test
。
这将更新源代码中的预期结果,如下所示:
import 'package:test/test.dart';
import 'package:inline_snapshot/inline_snapshot.dart';
void main() {
tearDownAll(() async {
await Expect.apply();
});
group('A group of tests', () {
test('First Test', () {
var e = Expect("actual string");
// ^已替换 "actual string"!!
e.eq("actual string");
});
});
}
你可以将 UPDATE_EXPECT
设置为 1
或 true
。如果不指定它,Expect
对象的行为类似于 expect(actual, expected)
,并且在比较之前会移除预期结果中的前导换行符。
它是如何工作的
当你调用 Expect("expect string")
时,预期结果和调用者的所在位置会被存储。当调用 Expect#eq(actual: String)
时,实际值与预期结果进行比较。如果它们匹配,测试被认为是成功的,不再执行其他操作。如果不匹配,预期结果将被标记为替换。当执行 Expect.apply()
时,标记为替换的实际值将被替换为预期结果。
贡献者
- ktanaka101 - 创建者,维护者
许可证
MIT
示例代码
import 'package:test/test.dart';
import 'package:inline_snapshot/inline_snapshot.dart';
void main() {
tearDownAll(() async {
await Expect.apply();
});
group('A group of tests', () {
test('First Test', () {
var e = Expect();
// ^替换 "actual string" 当运行 `UPDATE_EXPECT dart test`
e.eq("actual string");
});
});
}
更多关于Flutter内联快照生成插件inline_snapshot的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter内联快照生成插件inline_snapshot的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
inline_snapshot
是一个用于 Flutter 的插件,它可以帮助你在测试中生成内联的快照。快照测试是一种常用的测试方法,用于确保代码的输出与预期一致。inline_snapshot
的主要功能是自动生成和更新快照,从而简化测试过程。
安装
首先,你需要在 pubspec.yaml
文件中添加 inline_snapshot
依赖:
dev_dependencies:
inline_snapshot: ^1.0.0
然后运行 flutter pub get
来安装依赖。
使用
inline_snapshot
的主要功能是通过 inlineSnapshot
函数来生成和更新快照。你可以在你的测试中使用它来捕获和验证输出。
基本用法
import 'package:flutter_test/flutter_test.dart';
import 'package:inline_snapshot/inline_snapshot.dart';
void main() {
test('Example test with inline snapshot', () {
final result = someFunction();
inlineSnapshot(result); // 自动生成或更新快照
});
}
在这个例子中,inlineSnapshot
函数会捕获 result
的值,并将其与之前生成的快照进行比较。如果快照不存在,它会自动生成一个新的快照。如果快照存在但不匹配,测试将失败,并提示你可以更新快照。
更新快照
如果代码的输出发生变化,你可能需要更新快照。inline_snapshot
提供了一个命令行工具来更新快照:
flutter test --update-snapshots
运行这个命令后,inline_snapshot
会更新所有不匹配的快照。
自定义快照名称
你可以为快照指定一个名称,以便在同一个测试中使用多个快照:
test('Example test with named inline snapshot', () {
final result1 = someFunction();
inlineSnapshot(result1, name: 'result1');
final result2 = anotherFunction();
inlineSnapshot(result2, name: 'result2');
});
多行快照
inline_snapshot
也支持多行快照。你可以使用多行字符串来捕获复杂的输出:
test('Example test with multiline inline snapshot', () {
final result = '''
This is a
multiline
string
''';
inlineSnapshot(result);
});