Esta documentação encontra-se alguns acordos firmados pelos times de Desenvolvimento envolvidos com a tecnologia Flutter e como sera trabalhado.
Lembre-se de no pubspec.yaml sempre atualizar a versão, a tag dev seguir a mesma.
version: 1.0.1
Deve-se também a cada alteração ser relatado no arquivo CHANGELOG.md as esterações realizadas, versão, data e se disponível a branch.
## [1.0.1] - Fix Dependencies - 21/04/2021 - [fix/fix-dependencies]
* Foi atualizado as dependencias no no arquivo pubspec.yaml
A Forma de versionamento definida foi utilizando Tags.
Listagem de Tags: git tag -n
Criação de Tags: git tag 'v<mejor.minor.patch>'
Enviar as Tags: git push --tags
A importação das versões criadas deve ser da seguinte forma:
dependencies:
micro_core:
git:
url: https://github.com/DeividWillyan/-Curso-Micro-Core.git
ref: v1.0.0 # <- Aqui vai a Tag versionada
| obs: Também pode ser utilizado o dependency_overrides para resolver conflito de versões.
Links úteis
descrição da forma da arquitetura
Links úteis
Utilizaremos 4 formas de testes, Unit, Widget, Integration/Driver e Golden Test.
Utilizaremos os testes de unidades para validar tudo que é regra de negocio (códigos puramente dart).
test('Should LoginController return true in login method with correct values', () async {
bool result = await _controller.login(user, pass);
expect(result, true);
});
Utilizaremos os testes de Widget para validar se nossas Pages estão renderizando conforme o esperado.
testWidgets("Should find a single widget per view on screen rendering", (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(home: LoginPage()));
final appBarTitle = find.text('Login');
expect(appBarTitle, findsOneWidget);
});
Utilizaremos os testes de Golden para validar se os componentes em nosso Design System estão sendo criados conforme o esperado, tendo um feedback visual rapido e eficiente.
// flutter_test_config.dart
import 'dart:async';
import 'package:golden_toolkit/golden_toolkit.dart';
Future<void> testExecutable(FutureOr<void> Function() testMain) async {
return GoldenToolkit.runWithConfiguration(
() async {
await loadAppFonts();
await testMain();
},
config: GoldenToolkitConfiguration(),
);
}
// custom_button_widget_test.dart
testGoldens("CustomButtonWidget - Multiples Scenarios", (tester) async {
final builder = GoldenBuilder.grid(columns: 2, widthToHeightRatio: 1)
..addScenario(
'Default',
CustomButtonWidget(
text: 'CustomButton',
onPressed: () {},
),
)
..addScenario(
'Outlier',
CustomButtonWidget(
text: 'CustomButton',
onPressed: () {},
outline: true,
),
)
await tester.pumpWidgetBuilder(
builder.build(),
surfaceSize: const Size(500, 300),
);
await screenMatchesGolden(tester, 'custonButton_multiples_states');
});
// RUN
flutter test --update-goldens
Utilizaremos os testes de integração para garantir um completo funcionamento end-to-end.
// test_driver/integration_test.dart
import 'package:integration_test/integration_test_driver.dart';
Future<void> main() => integrationDriver();
// integration_test/complete_app_test.dart
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('Complete App Navigation Flux', (WidgetTester tester) async {
await tester.pumpWidget(MyApp());
final btnGoToHomePage = find.text('goToHome');
expect(btnGoToHomePage, findsOneWidget);
await tester.tap(btnGoToHomePage);
await tester.pumpAndSettle();
final pageHomeTitle = find.text('Home');
expect(pageHomeTitle, findsOneWidget);
await tester.pageBack();
await tester.pumpAndSettle();
final pageLoginTitle = find.text('Login');
expect(pageLoginTitle, findsOneWidget);
});
}
// Run
flutter drive --driver=test_driver/integration_test.dart --target=integration_test/complete_app_test.dart
Links úteis
desrição da forma de versionamento
Links úteis
desrição da forma de versionamento
Links úteis
desrição da forma de versionamento
Links úteis