Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/

Teste e depuração - Flutter SDK

Nesta página

  • Teste
  • Teste usando um Realm na memória
  • Teste usando um domínio padrão
  • Limpe o Realm nos testes
  • Serviços de App de Teste
  • Testar domínios sincronizados
  • depurar
  • Depurar com o Realm Studio
  • Depurar com DevTools e Editores de Código

Esta página aborda algumas estratégias para testar e depurar aplicativos Flutter usando o Realm Flutter SDK. Você provavelmente terá que adaptar os exemplos nesta página significativamente para trabalhar com seu aplicativo.

Para executar testes no Flutter SDK usando o flutter_test e teste, você deve primeiro executar o seguinte comando:

dart run realm install

Este comando instala binários nativos necessários para executar testes para o aplicativo Flutter.

Observação

Teste no macOS

Se você estiver desenvolvendo com o Realm Flutter SDK no macOS, as solicitações de rede não funcionam por padrão devido às configurações de segurança integradas do macOS. Para corrigir isso, você deve alterar os direitos de rede do aplicativo Flutter no macOS.

Para saber como fazer isso, consulte Usar o Realm com o macOS App Sandbox.

Observação

Teste o Dart autônomo SDK

Se você estiver usando o Dart autônomo SDK, não precisará instalar nenhum binário nativo adicional para executar os testes. Isso ocorre porque, como parte da instalação para usar o Dart autônomo SDK em um aplicativo, você já precisa instalar os binários nativos.

Uma maneira fácil de usar e testar aplicativos apoiados pelo Realm é testar usando um realm na memória. Isso ajuda a evitar a substituição de dados do aplicativo ou o vazamento de estado entre os testes. Observe que você não pode usar um Realm na memória para testar o Realm Mobile Sync. Para criar um realm na memória para seus testes, você pode fazer o seguinte:

  1. Instancie preguiçosamente o Realm com a palavra-chave late em um escopo maior do que seus testes

  2. Abra o Realm com um Configuration.inMemory() dentro de uma função setUp.

  3. Feche o Realm em uma função de desmontagem.

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
}

Outra maneira de usar e testar aplicativos apoiados pelo Realm é usar o Realm padrão . Para evitar a substituição de dados do aplicação ou o vazamento de estado entre os testes, defina o Realm padrão como um novo arquivo para cada teste usando Configuration.defaultRealmName dentro de uma função 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 limpar seus testes, você pode instanciar preguiçosamente o domínio com a palavra-chave late em um escopo maior do que seus testes. Em seguida, execute operações de limpeza dentro de uma função de desmontagem . Dentro da função de retorno de chamada tearDown , feche e exclua a instância de realm.

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 testar como seu aplicativo Flutter interage com Atlas App Services, crie um App Services App separado com a mesma configuração que seu aplicativo de produção e conecte-se a ele a partir do arquivo de teste. Para saber mais sobre como fazer uma cópia do aplicativo, consulte Copiar um aplicativo na documentação do App Services.

Você provavelmente também precisará de um usuário autenticado para testar os serviços que o aplicativo expõe. Muitas vezes, usuários anônimos são úteis para testes.

Para testar o aplicativo, você pode instanciar preguiçosamente App e User com a palavra-chave late em um escopo maior do que seus testes. Instancie o cliente App e faça login de um usuário dentro de uma função setUp . Em seguida, execute operações de limpeza dentro de uma função de desmontagem . Dentro da função de chamada de resposta de chamada tearDown , exclua o usuário atual do backend e, em seguida, desconecte-o do 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 testar como seu aplicativo Flutter funciona com Atlas Device Sync, crie um aplicativo separado App Services App com a mesma configuração que seu aplicativo de produção e conecte-se a ele a partir do arquivo de teste. Para saber mais sobre como fazer uma cópia do aplicativo, consulte Copiar um aplicativo na documentação do Atlas App Services .

O teste de realms sincronizados é baseado nas seções Limpar Realm em Testes e Testar App Services acima.

Para testar um Realm sincronizado, você pode instanciar preguiçosamente o App e o Realm com a palavra-chave late em um escopo superior ao seus testes. Em uma função tearDown , você deve executar o seguinte:

  1. Exclua todos os dados no Realm.

  2. Sincronize as alterações mais recentes com o Atlas para garantir que a exclusão se propague para o Atlas.

  3. Feche o Realm.

  4. Exclua o Arquivo de Realm do 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>());
});
}

O Realm Studio permite que você abra e edite domínios locais. É compatível com Mac, Windows e Linux.

Para depurar seu aplicativo, você pode usar o Realm Flutter SDK com o Flutter DevTools.

Voltar

Solução de problemas