Démonstration
Démonstration de Elixir et Phoenix
Cette démonstration nécessite d'avoir au préalable installé tout ce qu'il faut pour que Elixir et Phoenix fonctionnent correctement.
Génération d'un nouveau projet
mix phx.new project --app project
Lorsqu'il est demandé : Fetch and install dependencies?
entrer Y
Entrer dans le dossier crée : cd project
Configurer la base de données si besoin puis entrer : mix ecto.create
Générer un CRUD
mix phoenix.gen.html Accounts user name:string mail:string phone:string address:string age:integer
Ensuite, ajouter dans le router web/router.ex
le chemin vers la page /user
.
scope "/", helloPhoenix do
pipe_through :browser
get "/", PageController, :index
+ resources "/user", AccountsController #à ajouter
end
Puis migrer la base de données avec la commande mix ecto.migrate
Visualisation de l'app
mix phx.server
sur le serveur local localhost:4000.
Vous pouvez accéder à la page : localhost:4000/user et créer de nouveaux utilisateurs, les modifier, les supprimer, etc.
Lancement des tests
Ajout d'un test dans : test/{le-dossier-de-votre-choix}
, par exemple test/models/accounts_test.exs
test "the truth" do
assert 1+1 == 2
end
Puis exécuter :
mix test
À la fin il y aura : 17 tests, 0 failures
Et si on ajoute un test qui ne fonctionne pas :
test "won't work" do
assert 1+1 == 3
end
Après avoir lancé mix test
on obtient alors 18 tests, 1 failures
et les détails suivants :
1) test won't work (Project.AccountsTest) project/models/accounts_test.exs:23 Assertion with == failed code: assert 1 + 1 == 3 left: 2 right: 3 stacktrace: project/models/accounts_test.exs:24: (test)
Ajout de changeset
Dans web/models/accounts.ex
, on ajoute les lignes suivantes :
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name, :mail, :phone, :address, :age])
|> validate_required([:name, :mail, :phone, :address, :age])
+ |> validate_format(:mail, ~r/@/) #à ajouter
+ |> validate_inclusion(:age, 0..100) #à ajouter
Et on voit alors sur l'app web qu'il n'est plus possible d'insérer un nouvel utilisateur avec un age qui n'est pas compris entre 0 et 100 ou dont l'adresse email n'a pas un format valide.
Maintenant si on lance mix test
on voit que certains tests ne passent plus. Si on regarde les premières lignes des fichiers test/models/accounts_test.exs
et test/controllers/accounts_controller_test.exs
on voit alors que les données entrées ne correspondent pas aux requirements du changeset :
@valid_attrs %{address: "some content", age: 42, mail: "some content", name: "some content", phone: "some content"}
doit être remplacé par :
@valid_attrs %{address: "Polytech", age: 42, mail: "toto@titi.fr", name: "Toto", phone: "0600000000"}
Problèmes / Solutions
Quelques erreurs rencontrées lors de l'utilisation de Phoenix et leurs solutions
Commande | Erreur | Solution |
---|---|---|
|
FATAL 3D000: database "postgres" does not exist. The database couldn't be created, database "postgres" does not exist |
|
|
ERROR 42P07 (duplicate_table): relation "table" already exists |
Depuis Postico, supprimer la base de donnée en question |