テストのこの部分を実行しています:
describe Dictionary do
before do
@d = Dictionary.new
end
it 'can check whether a given keyword exists' do
@d.include?('fish').should be_false
end
このコードで:
class Dictionary
def initialize
@hash = {}
end
def add(new_entry)
new_entry.class == String ? @hash[new_entry] = nil : new_entry.each { |noun, definition| @hash[noun] = definition}
end
def entries
@hash
end
def keywords
@hash.keys
end
def include?(Word)
if @hash.has_key?(Word)
true
else
false
end
end
end
何が間違っているのかわかりませんが、テストが失敗し続け、次のように言っています。
> 1) Dictionary can check whether a given keyword exists
> Failure/Error: @d.include?('fish').should be_false
> expected false to respond to `false?`
それが正しい答えを与えているように見えるので、私はエラーで混乱しています。誰かが私のコードの何が問題なのか教えてくれるのに数分かかることがあれば本当にありがたいです。トンありがとうございます。
RSpec Expectations 2.99 と RSpec Expectations 2.14 を閲覧し、セクション-真実と実存主義を検索すると、
expect(actual).to be_true # passes if actual is truthy (not nil or false)
expect(actual).to be_false # passes if actual is falsy (nil or false)
# ...............
# ...
しかし、あなたが閲覧した RSpec Expectations 3. 、上記のメソッド名は-に変更されました
expect(actual).to be_truthy # passes if actual is truthy (not nil or false)
expect(actual).to be true # passes if actual == true
expect(actual).to be_falsey # passes if actual is falsy (nil or false)
# ...........
#......
3.0で、このバージョンより前に存在していた方法を使用しているようです。したがって、エラーが発生していました。
以下のようにtest.rbファイルにコードを入れました:-
class Dictionary
def initialize
@hash = {}
end
def add(new_entry)
new_entry.class == String ? @hash[new_entry] = nil : new_entry.each { |noun, definition| @hash[noun] = definition}
end
def entries
@hash
end
def keywords
@hash.keys
end
def include?(Word)
if @hash.has_key?(Word)
true
else
false
end
end
end
そして、私のspec/test_spec.rbファイルは-
require_relative "../test.rb"
describe Dictionary do
before do
@d = Dictionary.new
end
it 'can check whether a given keyword exists' do
@d.include?('fish').should be_false
end
end
今、私は自分のコンソールからコードを実行しています、そしてそれは機能します:
arup@linux-wzza:~/Ruby> rspec -v
2.14.8
arup@linux-wzza:~/Ruby> rspec spec
.
Finished in 0.00169 seconds
1 example, 0 failures
今私は私のspec/test_spec.rbファイルのコードを変更しています:-
require_relative "../test.rb"
describe Dictionary do
before do
@d = Dictionary.new
end
it 'can check whether a given keyword exists' do
@d.include?('fish').should be_falsey
end
end
そして再びテストを実行します:-
arup@linux-wzza:~/Ruby> rspec -v
2.14.8
arup@linux-wzza:~/Ruby> rspec spec
F
Failures:
1) Dictionary can check whether a given keyword exists
Failure/Error: @d.include?('fish').should be_falsey
NoMethodError:
undefined method `falsey?' for false:FalseClass
# ./spec/test_spec.rb:9:in `block (2 levels) in <top (required)>'
Finished in 0.00179 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/test_spec.rb:8 # Dictionary can check whether a given keyword exists
arup@linux-wzza:~/Ruby>
さて、彼らは .0.0.beta1/2013-11-07 changelog にも言及しました
名前を変更する
be_true
およびbe_false
からbe_truthy
およびbe_falsey
。 (サム・フィッペン)