新卒エンジニアがRspecを書くまでに取り組んだこと

tnandate
tnandate
Dec 23, 2018 · 4 min read

この記事は [MoneyForward Advent Calendar 2018]の23日目の記事です。
こんにちは、エンジニアの@tnandateです。
18新卒で、普段は「マネーフォワード クラウド給与」、「マネーフォワード クラウドマイナンバー」の開発をしています。

はじめに

みなさんはテストコードを書いていますか?僕は入社するまで書く習慣がありませんでした。そんな僕ですが、今では日常的にテストコードを書いています。今回はこれまでに取り組んだことを話そうと思います。

先人に学ぶ

ありがたいことに、社内にRspecを学ぶ上で役にたったものをまとめた素晴らしい記事があったので、それを参考にしてみました。

この中でも、僕はBetter Specsrspec-style-guideを特に参考にしました。この2つはRspecのお作法集で、可読性の高いテストコードとは何か、それを書くにはどう書けばいいかわからない、といった自分にはぴったりでした。
内容的にも読みやすかったのでおすすめです。

describe/context/itの各役割を理解しておく

Rspecを書き始めた時、「describeとかcontextとか、色々あってわからん!どう使い分けるんだ?」とぼやいていました。

これらは、引数に何を記述しても動きますが、間違った使い方をしてしまうと可読性を落としてしまいます。

僕の認識だと

  • describeはテストの対象を記述する。
  • contextにはテストを行う上での条件、状態を記述する。
  • itにはどんなアウトプットが返ってくるかを記述する。

と思っています。

例えば、FizzBuzzを例にあげてみると、

Rspec.describe FizzBuzz, type: :model do
let(:fizz_buzz) { FizzBuzz.new }

describe '#run' do
context '3の倍数の時' do
it 'Fizzという文字列が返ってくること' do
expect(fizz_buzz.run(3)).to eq 'Fizz'
expect(fizz_buzz.run(6)).to eq 'Fizz'
expect(fizz_buzz.run(9)).to eq 'Fizz'
end
end

・・・
end
end

こんな感じでしょうか?
それぞれの役割をきちんと理解すると、スラスラとテストコードが書けるようになると思います。

既存のコードを参考にする

普段開発しているプロダクトのコードやOSSのコードも参考にしてみました。
これらを読んでいくと、ある程度パターンが掴めてきました。

例えばActiveRecordのモデルだと

RSpec.describe Hoge, type: :model do
describe 'Associations' do
end

describe 'Validations' do
end

describe 'Scopes' do
end

describe 'InstanceMethods' do
end

describe 'ClassMethods' do
end
end

こんな感じでしょうか?

型が決まっていると爆速で書くことができますね。

おわりに

一番大事なのはテストがないコードをスルーしないことだと思っています。僕も最初は時間がかかりましたが、数をこなしていくうちにだんだん慣れてきました。継続は力なりですね。

ではみなさん良いクリスマスを!

    tnandate

    Written by

    tnandate

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade