LoginSignup
0
0

More than 5 years have passed since last update.

Rspecの勉強01

Last updated at Posted at 2016-12-02

参考サイト

エッ、今さら!?練習問題と具体的コード例によるTDD超入門。

Rspecを身に付けるまでにすること

1、Rspec、TDDって何?
2、sampleコードを真似て書いてみる。コードの理解と雰囲気を掴む(参考サイトを参照)
3、自分で考えてRspecを書いてみる

OUT PUT(1〜2が目的)

エッ、今さら!?練習問題と具体的コード例によるTDD超入門。

unagi_spec.rb
require './unagi.rb'

 describe Unagi do
   describe '#initialize' do
     it '指定した座席数のゼロ配列が確保される' do
       expect(Unagi.new(3).seats).to eq [0, 0, 0]
     end
   end

   describe '#seating' do
     it '「長テーブルの座席番号」と「お客さんの人数」を指定すると「座席にお客さんが配置される」' do
       unagi = Unagi.new(5)
       unagi.seating(1, 3)
       expect(unagi.seats).to eq [1, 1, 1, 0, 0]
     end

     it '長テーブルの最初と最後の席をまたぐ場合、最初の席から配置される' do
       unagi = Unagi.new(5)
       # 5番目の席から3人座る
       unagi.seating(5, 3)
       expect(unagi.seats).to eq [1, 1, 0, 0, 1]
     end

     it '座席に他のお客さんが配置されている場合、座席の状態は変化しない' do
       unagi = Unagi.new(5)
       unagi.seating(2, 3)
       expect(unagi.seats).to eq [0, 1, 1, 1, 0]
       unagi.seating(4, 2)
       expect(unagi.seats).to eq [0, 1, 1, 1, 0]
     end
   end

  describe '#count' do
    it '座席に着席しているお客さんの人数を返却する' do
      unagi = Unagi.new(5)
      unagi.seating(1, 1)
      expect(unagi.count).to eq 1
      unagi.seating(2, 1)
      expect(unagi.count).to eq 2
      unagi.seating(3, 1)
      expect(unagi.count).to eq 3
      unagi.seating(3, 1)
      expect(unagi.count).to eq 3
      unagi.seating(4, 1)
      expect(unagi.count).to eq 4
      unagi.seating(5, 1)
      expect(unagi.count).to eq 5
    end
  end
end
unagi.rb
class Unagi
   attr_reader :seats

   def initialize(seat_count)
     @seats = Array.new(seat_count, 0)
   end

   def seating(seat_number, people_count)
     s = seat_number - 1
     people_count.times do
       return if @seats[s] == 1
       s += 1
       s = 0 if @seats.size <= s
     end

     s = seat_number - 1
     people_count.times do
       @seats[s] = 1
       s += 1
       # インデックスが配列の最後を超えると最初に戻る
       s = 0 if @seats.size <= s
     end
   end

  def count
    @seats.select{ |s| s == 1 }.count
  end
end

次回

もうすこし1〜2を理解したいので、sample codeを模写しながら書く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0