Ruby on rails 如何使用模型函数删除条目?
我正在处理一项rails任务,该任务要求在模型中使用remove_entry方法,并对remove_entry进行工作测试。我考试不及格。有人对如何在addressbook.rb中定义remove_entry方法以及如何在entry_spec.rb中编写测试有什么建议吗 Entry.rb:Ruby on rails 如何使用模型函数删除条目?,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正在处理一项rails任务,该任务要求在模型中使用remove_entry方法,并对remove_entry进行工作测试。我考试不及格。有人对如何在addressbook.rb中定义remove_entry方法以及如何在entry_spec.rb中编写测试有什么建议吗 Entry.rb: #Load a library called entry.rb require_relative "entry.rb" class AddressBook attr_accessor :entries
#Load a library called entry.rb
require_relative "entry.rb"
class AddressBook
attr_accessor :entries
def initialize
@entries = []
end
def add_entry(name, phone, email)
#Create a variable index to store
index = 0
@entries.each do |entry|
if name < entry.name
break
end
index += 1
end
@entries.insert(index,Entry.new(name,phone,email))
end
def remove_entry(entry)
@entries.destroy(entry)
end
end
我也有entry.rb和entry_spec.rb,但我相信它们会删除地址簿中的方法,对吗?因为正在从该模型中删除条目。如有任何澄清,将不胜感激 您是对的,
remove\u entry
方法应该在AddressBook
中,因为它正在修改地址簿的条目
集合(并且entry
类不应该知道AddressBook
或其内部内容)
但是,由于您的add\u entry
方法没有公开entry
类,因此您希望让remove\u entry
以相同的方式工作,可能是通过电子邮件查找条目(应该是唯一的,而不是名称可能不唯一)。所以你可以这样做:
def remove_entry(email)
@entries.delete_if {|entry| entry.email == email}
end
context ".remove_entry" do
it "deletes one entry of the address book" do
book = AddressBook.new
book.add_entry('Ada Lovelace', '010.012.1815', 'augusta.king@lovelace.com')
book.delete_entry('augusta.king@lovelace.com')
expect(book.entries.size).to eq(0)
end
end
要测试此方法,请执行以下操作:
def remove_entry(email)
@entries.delete_if {|entry| entry.email == email}
end
context ".remove_entry" do
it "deletes one entry of the address book" do
book = AddressBook.new
book.add_entry('Ada Lovelace', '010.012.1815', 'augusta.king@lovelace.com')
book.delete_entry('augusta.king@lovelace.com')
expect(book.entries.size).to eq(0)
end
end