そこで、Ruby でディクショナリ オブジェクトを作成し、プロジェクトの一部として多数の RSPEC テストに合格させようとしています。これまでのところは順調ですが、1 つの特定のテストで行き詰まっています。そのテストまでのRSPECは次のとおりです。
require 'dictionary'
describe Dictionary do
before do
@d = Dictionary.new
end
it 'is empty when created' do
@d.entries.should == {}
end
it 'can add whole entries with keyword and definition' do
@d.add('fish' => 'aquatic animal')
@d.entries.should == {'fish' => 'aquatic animal'}
@d.keywords.should == ['fish']
end
it 'add keywords (without definition)' do
@d.add('fish')
@d.entries.should == {'fish' => nil}
@d.keywords.should == ['fish']
end
it 'can check whether a given keyword exists' do
@d.include?('fish').should be_false
end
it "doesn't cheat when checking whether a given keyword exists" do
@d.include?('fish').should be_false # if the method is empty, this test passes with nil returned
@d.add('fish')
@d.include?('fish').should be_true # confirms that it actually checks
@d.include?('bird').should be_false # confirms not always returning true after add
end
end
最後のテスト「特定のキーワードが存在するかどうかを確認するときにチートしない」以外は、これまでのところすべて合格しています。どうすればそれを通過させることができるかについて頭を悩ませようとしていますが、これまでのところ成功していません。どんな助けでも大歓迎です。これが私がこれまでに持っているものです:
class Dictionary
attr_accessor :keywords, :entries
def initialize
@entries = {}
end
def add(defs)
defs.each do |word, definition|
@entries[word] = definition
end
end
def keywords
input = []
@entries.each do |key, value|
input << key
end
input.sort
end
def include?(key)
self.keywords.include?(keywords.to_s)
end
end
前もって感謝します!