ネットミームをコードで表現してみるかもしれないシリーズ。
まあ、にんげん(Human
)と牛(Cow
)の抽象クラス Animal
を定義する:
class Animal
end
中身は何も無いけど、そのうち実装されるっしょ。ヘーキヘーキ。
ここら辺で Animal
クラス必要ないなって思ったけど、まあいいか。
ああ、次は牛とにんげんだ…。
require_relative 'animal'
class Cow < Animal
end
次はにんげん。
require_relative 'animal'
class Human < Animal
end
何も中身ないけど、ヘーキヘーキ。
ということで、スペックファイルを書いてみよう。
describe Human do
it 'にんげんは牛ではない' do
TODO
end
end
ここで describe
のブロックの中で Human
は described_class
って書けるらしい。
さて、にんげんは牛ではないことを調べるにはどうすればいいだろう?
とぼけるのも疲れてきたので、長年温めてきた常識を働かせてみると、明らかに Human
と Cow
は別のものだ。
つまり:
if Human != Cow then
puts 'にんげんは牛じゃないよ!'
else
puts 'ふえぇぇ………、にんげんは牛だったようです………'
end
ってやって、「にんげんは牛じゃないよ!」って表示されればいいわけだ。そうだよね?
こーいうのを RSpec でかっこよく書きたい。
RSpec ではテストする主体?を except()
に渡す。それで、 .to
ってやって……
同じかどうか調べるには equal()
に調べたい値を渡す。
except( described_class ).to equal( Cow )
いいぞ!
described_class
の替わりに Human
って書いても良い。
except( Human ).to equal( Cow )
いいね!
でもちょっと待って。
こうすると、Human
と Cow
は同じかどうか調べることになってしまう!
どうしよう?!
.to
の替わりに .to_not
を使うことで、式の否定版にすることができる。
じゃあ、こんな感じかな?
except( described_class ).to_not equal( Cow )
うまくいった!
it
の中に移してみよう:
describe Human do
it 'にんげんは牛ではない' do
except( described_class ).to_not equal( Cow )
end
end
おしまい。
完成したのが こっちにあるので、てきとーに答え合わせしてみてね。