Docs Menu
Docs Home
/ /
SDK de Flutter

Prueba y depuración - SDK de Flutter

Esta página describe algunas estrategias para probar y depurar aplicaciones Flutter con el SDK Realm Flutter. Probablemente tengas que adaptar considerablemente los ejemplos de esta página para que funcionen con tu aplicación.

Para ejecutar pruebas en el SDK de Flutter usando el prueba de aleteoy para probar, primero debes ejecutar el siguiente comando:

dart run realm install

Este comando instala los binarios nativos necesarios para ejecutar pruebas para la aplicación Flutter.

Nota

Pruebas en macOS

Si desarrollas con el SDK de Flutter de Realm en macOS, las solicitudes de red no funcionan de forma predeterminada debido a la configuración de seguridad integrada de macOS. Para solucionarlo, debes cambiar los permisos de red de la aplicación Flutter en macOS.

Para saber cómo hacer esto, consulta Usar Realm con macOS App Sandbox.

Nota

Pruebas para el SDK independiente de Dart

Si usa el SDK independiente de Dart, no necesita instalar binarios nativos adicionales para ejecutar pruebas. Esto se debe a que, como parte de la instalación para usar el SDK independiente de Dart en una aplicación, ya necesita instalar los binarios nativos.

Una forma sencilla de usar y probar aplicaciones respaldadas por Realm es usar un dominio en memoria. Esto ayuda a evitar la sobrescritura de datos de la aplicación o la fuga de estado entre pruebas. Tenga en cuenta que no puede usar un dominio en memoria para probar la sincronización de dispositivos. Para crear un dominio en memoria para sus pruebas, puede hacer lo siguiente:

  1. Instancia perezosamente el Realm con la palabra clave late en un alcance mayor que sus pruebas

  2. Abra el reino con un Configuration.inMemory() dentro de una función setUp.

  3. Cierra el reino con una función tearDown.

import 'package:realm/realm.dart';
import 'package:flutter_test/flutter_test.dart';
import '../lib/schema.dart'; // Import schema used in test
void main() {
late Realm realm;
setUp(() {
realm = Realm(Configuration.inMemory([Car.schema]));
});
tearDown(() {
realm.close();
});
// ...rest of test code
}

Otra forma de usar y probar aplicaciones respaldadas por Realm es usar el dominio predeterminado. Para evitar sobrescribir los datos de la aplicación o filtrar el estado entre pruebas,configure el dominio predeterminado en un nuevo archivo para cada prueba mediante Configuration.defaultRealmName dentro de una función setUp.

import 'dart:math';
import 'package:realm/realm.dart';
import 'package:flutter_test/flutter_test.dart';
// Utility function to generate random realm name
String generateRandomRealmName(int len) {
final r = Random();
const _chars =
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
final nameBase =
List.generate(len, (index) => _chars[r.nextInt(_chars.length)]).join();
return '$nameBase.realm';
}
void main() {
// Set default Realm name before each test
setUp(() {
Configuration.defaultRealmName = generateRandomRealmName(10);
});
// ...rest of test code
}

Para limpiar tus pruebas, puedes instanciar el reino de forma diferida con la late palabra clave en un ámbito superior al de tus pruebas. Luego, ejecuta las operaciones de limpieza dentro de una función de desmontaje. Dentro de la tearDown función de devolución de llamada, cierra y elimina la instancia del reino.

import 'package:realm/realm.dart';
import 'package:flutter_test/flutter_test.dart';
import '../lib/schema.dart'; // Import schema used in test
void main() {
late Realm realm;
// Close and delete the realm after each test
tearDown(() {
final path = realm.config.path;
realm.close();
Realm.deleteRealm(path);
});
test("Open a local realm", () {
realm = Realm(Configuration.local([Car.schema]));
expect(realm.isClosed, isFalse);
});
}

Para probar cómo interactúa tu app de Flutter con Atlas App Services, crea una app de App Services independiente con la misma configuración que tu app de producción y conéctate a ella desde tu archivo de prueba. Para saber más sobre cómo hacer una copia de la app, consulta "Copiar una app" en la documentación de App Services.

Probablemente también necesites un usuario autenticado para probar los servicios que ofrece la aplicación. A menudo, los usuarios anónimos son útiles para las pruebas.

Para probar la aplicación, puedes instanciar App y de forma diferida User con la late palabra clave en un alcance superior al de tus pruebas. Instancía el App cliente e setUp inicia la sesión de un usuario dentro de una función. Luego, ejecuta operaciones de limpieza dentro de una función de desmontaje. Dentro de la tearDown función de devolución de llamada, elimina al usuario actual del backend y cierra su sesión en el dispositivo.

import 'package:realm/realm.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
late App app;
setUp(() async {
app = App(AppConfiguration(TEST_APP_ID));
await app.logIn(Credentials.anonymous());
});
// Delete and log current user out
tearDown(() async {
app.deleteUser(app.currentUser!);
await app.currentUser?.logOut();
});
test("Check user type", () {
final user = app.currentUser!;
expect(user.identities[0].provider, AuthProviderType.anonymous);
});
}

Para probar el funcionamiento de tu app de Flutter con Atlas Device Sync, crea una app de App Services independiente con la misma configuración que tu app de producción y conéctate a ella desde tu archivo de prueba. Para saber más sobre cómo hacer una copia de la app, consulta "Copiar una app" en la documentación de App Services.

La prueba de reinos sincronizados se basa en las secciones Limpiar reino en pruebas y Servicios de aplicaciones de prueba anteriores.

Para probar un dominio sincronizado, puede instanciar App y Realm de forma diferida con la palabra clave late en un ámbito superior al de sus pruebas. En una función tearDown, debe realizar lo siguiente:

  1. Eliminar todos los datos del reino.

  2. Sincronice los últimos cambios en Atlas para garantizar que la eliminación se propague a Atlas.

  3. Cierra el reino.

  4. Eliminar el archivo Realm del dispositivo.

import 'package:realm/realm.dart';
import 'package:flutter_test/flutter_test.dart';
import '../lib/schema.dart'; // Import schema used in test
void main() {
late App app;
late Realm realm;
setUp(() async {
app = App(AppConfiguration(TEST_APP_ID));
await app.logIn(Credentials.anonymous());
});
// Log current user out
tearDown(() async {
// Delete all items in the realm so that the items are not persisted in Atlas
// and do not re-sync in subsequent tests.
realm.write(() => realm.deleteAll<Car>());
// Fully synchronize realm before closing and deleting
await realm.syncSession.waitForDownload();
await realm.syncSession.waitForUpload();
// Get path before realm closed to pass to Realm.deleteRealm()
final path = realm.config.path;
realm.close();
Realm.deleteRealm(path);
await app.currentUser?.logOut();
});
test("Add subscriptions", () async {
const subName = 'allDogs';
final user = app.currentUser!;
realm = Realm(Configuration.flexibleSync(user, [Car.schema]));
realm.subscriptions.update((mutableSubscriptions) {
mutableSubscriptions.add(realm.all<Car>(), name: subName);
});
await realm.subscriptions.waitForSynchronization();
expect(realm.subscriptions.findByName(subName), isA<Subscription>());
});
}

Realm Studio te permite abrir y editar dominios locales. Es compatible con Mac, Windows y Linux.

Para depurar su aplicación, puede utilizar el SDK Realm Flutter con Flutter DevTools.

Volver

Solución de problemas

En esta página