Testing models in Flutter
Tags: flutter, testing
Published: 2024-07-10 15:36:06

Know so many people that do not do testing or do not know what _Testing_ means, even you know that another one do not even know the powerful native testing that Flutter integrate in our projects. So let us find out what **flutter_test** can do for use, and how can make us be more productive and efficient in our projects.

![awesome](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/me1hoj8js7fdx5n0tp56.gif)

## Model Testing
It is not too usual to do this type of test, but sometimes we need to _check the logic_ of our models or interact directly with the model, and we feel tired of making a UI only to check if the model is correct.

Let's use a simple model of `User `that is ideal to use from **APIs **model, using factory and `toJson `method.

```dart
class User {
  final String username;
  final String email;
  final String token;

  User({
    required this.username,
    required this.email,
    required this.token,
  });

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      username: json['username'],
      email: json['email'],
      token: json['token'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'username': username,
      'email': email,
      'token': token,
    };
  }

  @override
  String toString() {
    return 'User(username: $username, email: $email, token: $token)';
  }
}
```

And now, you have this model with the name `user.dart`, then outside of `src` go to the folder `test`, if you don't have it create a new one. Then create a new file named `user_test.dart`. Then we need a classic main:

```dart
void main() {
}
```

Inside of our main add this new test:

```dart
test('User toJson() should return a valid JSON map', () {});
```

Quite simple, right? This is how we create a _function test_, it is important to ALWAYS have a clear description of what our test will do. Now we need to add some code in our function.

```dart
test('User toJson() should return a valid JSON map', () {
    final user = User(
      username: 'sample_username',
      email: 'sample_email@example.com',
      token: 'sample_token',
    );

    final json = user.toJson();

    expect(json['username'], equals('sample_username'));
    expect(json['email'], equals('sample_email@example.com'));
    expect(json['token'], equals('sample_token'));
  });
```

As you can see, it is a remarkably simple test that we only check if toJson make the JSON that we want, why? You need to check if all the parameters are correct to send to our API.

And now let's evaluate if a JSON send of our API is valid to create a User object for Flutter:

```dart
test('User fromJson() should create a valid User object', () {
    final json = {
      'username': 'sample_username',
      'email': 'sample_email@example.com',
      'token': 'sample_token',
    };

    final user = User.fromJson(json);

    expect(user.username, equals('sample_username'));
    expect(user.email, equals('sample_email@example.com'));
    expect(user.token, equals('sample_token'));
  });
```

## Created the file test, and now?

![question](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bu0o9fu9y2donqznflaj.gif)

After this, we have the simple task to run in the terminal: `flutter test` and enjoy the green lights (Or red...) and that is all to do for simple testing in models. In a future post I will explain how to test SQLite models or Hive models, etc. But for now, this is all, thanks for reading!


![thanks](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iew40cmkcb3y483jl89c.gif)