我有一个 Flutter 应用程序,在用户登录后显示数据。我有单元和小部件测试,现在想编写我的第一个集成/端到端测试来测试用户登录的整个“快乐路径”工作流并查看数据。
当应用程序调用登录 API (GET login_api_path) 时,我想返回一些预定义的 JSON 以显示在屏幕上的内容,而不是向服务器发出真正的请求。
这是一个明智的方法,如果是这样,最好的方法是什么?我发现的大多数资源都是专门用于单元测试的。
我正在使用模拟客户端编写 Flutter 集成测试,该客户端为我的应用程序调用的每个 REST 端点返回一个 JSON 响应。这些 JSON 响应存储在单独的 JSON 文件中,但在测试运行时我无法访问这些文件。
我尝试通过创建和读取新文件对象来加载文件。Flutter:如何加载文件进行测试,但始终找不到该文件。我还尝试将我的 JSON 文件放入资产中。这有效,但也导致在我构建 APK 时捆绑了测试 JSON 文件。
简化的模拟客户端:
MockClient integrationMockClient = MockClient((request) async {
switch (request.url.toString()) {
case 'https://staging.company.com/api/123':
return Response(readJsonfile('myJsonFile.json'), 200);
Run Code Online (Sandbox Code Playgroud)
简化的集成测试主要功能 - 传入模拟客户端。 test_driver/app.dart
void main() async {
enableFlutterDriverExtension();
final app = await initializeApp(
integrationMockClient
);
runApp(app);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试读取文件时,它永远找不到它。可能是因为 flutterDriver 运行“真正的应用程序”而无法访问存储在测试目录中的文件。
如何从集成测试访问 JSON 文件而不将其捆绑在生产代码/APK 中?
我想知道一个文本字符串中有多少个特定单词的匹配项。我希望将我正在搜索的单词作为变量而不是字符串提供。搜索应该不区分大小写。
我可以让它与变量一起工作:
String text = "here is some text and SOME more words";
String word = "some";
RegExp pattern = RegExp(word);
Iterable matches = pattern.allMatches(text);
print(matches.length); // prints 1 but want 2.
Run Code Online (Sandbox Code Playgroud)
但我不确定如何添加不区分大小写。JavaScript 风格/i并RegExp(word, "i")不起作用。
Dart 文档显示有一个名为 的属性,isCaseSensitive但它显示为read-only.
https://api.dartlang.org/stable/2.7.0/dart-core/RegExp-class.html
在我的 Flutter 应用程序中,我使用CustomPainter来允许用户在屏幕上绘制他们的签名。我需要找到一种方法将其保存为图像。
当您能够PictureRecorder按照之前的 StackOverflow 回答将对象传递到画布时,PictureRecorder工作得很好:
final recorder = new PictureRecorder();
Canvas(recorder).drawSomething;
final picture = recorder.endRecording();
Run Code Online (Sandbox Code Playgroud)
但是,当使用CustomPainter画布时是Paint()函数的参数。
class myPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
drawToCanvas(canvas);
@override
bool shouldRepaint(CustomPainter old) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以总结一下:
如何从 CustomPainter 生成图像?
如果答案是使用 PictureRecorder,我如何将记录器传递给画布?
我是使用 aws-amplify 的新手,并且有一个与此类似的函数,它会调用一个查询listItems并返回isEnbledtrue(来自 DynamoDB)的项目。我希望这个过滤整个表,这可能是巨大的。因此,我无法简单地设置一个像 1000 这样的限制并保留它。有没有办法指定无限查询并扫描表中的所有内容?或者我应该使用其他属性吗?
import { API } from 'aws-amplify'
export async function getAllEnabledListItems() {
const { data } = await API.graphql({
query: queries.listItems,
variables: { filter: { isEnabled: { eq: true } }, limit: 10000 },
authMode: 'AMAZON_COGNITO_USER_POOLS'
})
return data
}
Run Code Online (Sandbox Code Playgroud) dart ×3
flutter ×3
flutter-test ×2
aws-amplify ×1
canvas ×1
graphql ×1
image ×1
javascript ×1
regex ×1