TL;DR If you came here only for the technical article, please jump to the next section. If you are curious about who am I and why I start publishing here, you can continue reading this introduction.
This is my first article on medium, so I thought it would be a good idea to start it with an introduction. I will present myself, who am I, what I do, and what you can expect to appear on this blog.
My name is Jean-Philippe Cugnet. I’m a 23 years old software engineer and photographer, living in Caen, France. I just got a Master degree in IT Security at the University of Caen and I’m currently working as an embedded software developer in a design house. I also love film photography a lot, making photos from little things people may not care about. The photography story goes on my website. The technical one continues here.
I run a server on which I installed eJabberd, an XMPP server written in Erlang. Curious about the language, I read its article on Wikipedia a while ago. I said to myself it would be fun to learn it some day. Then, in one of the eJabberd’s changelogs, I’ve seen something about Elixir. I did not particularly notice at the time, but reading again about it while looking for something new to learn did tilt. Then I came to Phoenix, and here am I.
I currently run one Phoenix application in “production” to help me organise parties with friends. I also played a bit with soft-realtime features provided by the Phoenix channels to remotely control an embedded system, and I’m now starting a new project to help film photographers manage their rolls of film, from stock to archives.
I’m starting this blog for sharing my solution to an issue I’ve already run into twice. I thought many times to start a blog to tell about different things. This time, I feel confident enough to start with this subject I really love: coding in Elixir. Many articles here will deal with software development, but I may also share my thoughts, ideas an knowledge about many other subjects. I may post often or not, I frankly don’t know. We’ll see.
A few days ago, I started to write kakte, my second Phoenix application with contexts. This is also the second time I’ve run into the same little problem: sharing fixtures across test modules. In fact, when you generate a new schema in Phoenix, you end up with close test fixtures in two different places.
First, you write the tests for the context with valid attributes:
Then, you want to write some tests for the controller:
There is here a lot of code duplication! This is not great to write, and worse to maintain. What if I want to add an attribute to my users, like a role? I must update two files and that’s not really fun to do.
My solution to this problem has been to create a new module in test/support/fixtures.ex. It aims to provide fixtures for whatever schema you want, just by using it:
Then, in my tests I am able to use them:
If I need to import fixtures for several schemas in the future, I’ll be able to do so by defining them in fixtures.ex and passing the atoms as a list to the use statement:
use Kakte.Fixtures, [:user, :film_roll]
I hope this little article will be helpful to some of you in your search for writing better code. To Elixir developers with more experience: how do you solve this issue? Is there a better way to do it? Don’t hesitate to share your thoughts on this in the comments.