Sirus
I am playing with elixir, phoenix and ecto. And ran into trouble.
Repo.get return nil because Room table is empty when test start. But else block with nil pattern don’t work.
My code:
test "unexisted room" do
with room <- App.Repo.get(App.Room, 1),
true <- test_fn("good") do
IO.inspect(room)
else
nil -> IO.puts("Room does not exist")
false -> IO.puts("Not good")
_ -> IO.puts("error")
end
end
defp test_fn(good?) do
case good? do
"good" -> true
_ -> false
end
end
result mix.test:
nil.
If i change true <- test_fn("some not good") it return false and else block work fine
result mix.test:
Not good.
Then for test i add nil case in test_fn and add call test_fn in with block
Code:
test "unexisted room" do
with room <- App.Repo.get(App.Room, 1),
true <- test_fn(nil),
true <- test_fn("false") do
IO.inspect(room)
else
nil -> IO.puts("Room does not exist")
false -> IO.puts("Not good")
_ -> IO.puts("error")
end
end
defp test_fn(good?) do
case good? do
"good" -> true
nil -> nil
_ -> false
end
end
result mix.test:
Room does not exist.
Why with else don’t work with ecto repo?
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m aware of 2 such projects, are there others?
git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
Hi everyone.
My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
Hello folks!
So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
How Can I Optimise Compile Time Dependencies
I have been building an elixir application for about 2 years now. Many modules and files ha...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
Other Trending Topics
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with.
But I don’t use it anymore.
Serverless was the promis...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #hex










Showing Posts 1 to 3- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
kip
In your first example,
App.Repo.get(App.Room, 1)returnsnilit will still bindniltoroom.test_fn("good")will returntrueso that will also pass.IO.inspect(room)and sinceroom == nilyou seenil.From that explanation I think you can work out the second example. You might find some value in
with room when not is_nil(room) <- App.Repo.get(App.Room, 1).Sirus
Thanks, here is my problem
My solution
joey_the_snake
If the
elsebehaviour changes depending on the type of failure, it is generally considered clearer to put those behaviours inside of their own functions and then use those functions inside thewithstatement.For example, your code can be refactored to this:
or this
Some references: