Ruby on rails 使用Rspec测试是否存在和是否属于
我正在尝试学习如何使用Rspec进行测试 目前,我有一个项目类的规范:Ruby on rails 使用Rspec测试是否存在和是否属于,ruby-on-rails,ruby-on-rails-3,rspec,tdd,factory-bot,Ruby On Rails,Ruby On Rails 3,Rspec,Tdd,Factory Bot,我正在尝试学习如何使用Rspec进行测试 目前,我有一个项目类的规范: require 'spec_helper' describe Item do it { should belong_to :list } before(:each) do @item = FactoryGirl.create(:item) end subject { @item } it { should respond_to :name } it { should validate_
require 'spec_helper'
describe Item do
it { should belong_to :list }
before(:each) do
@item = FactoryGirl.create(:item)
end
subject { @item }
it { should respond_to :name }
it { should validate_presence_of :name }
end
不过,我有几个问题要问
它{应该验证:name的存在}与写入相同:
describe "when name is not present" do
before { @item.name = "" }
it { should_not be_valid }
end
还是两者之间有着至关重要的区别
我还想知道是否值得在规范中编写它{应该属于_to:list}
,或者是否有更好的方法
我还知道我可以做@item=FactoryGirl.build(:item)
或FactoryGirl.create(:item)
。create是否将该项保存到测试数据库,build是否保存?或者我在这里感到困惑。我什么时候应该用哪个
谢谢。我猜您正在使用
shoulda matchers
或类似的工具。他们的优势是(我认为)他们为你提供了简短的匹配,就像你以前使用的那样
我个人相信以下测试:
it { should belong_to :list }
it { should validate_presence_of :name }
是很重要的,因为我的班级很可能会如下所示:
class Item
belongs_to :list
validate_presence_of :name
end
如果有人更改了其中任何一行,它将显示在测试中
因此,我认为他们确实值得写一个规范,这也不是很多工作
第二:是的,应该验证
的存在确实与较大的形式相似,但我发现较短的形式更具表现力。请使用简短的表格
第三:工厂女孩差异:
- 使用
FactoryGirl。如果对象需要存在于数据库中,则创建
,例如,因为您希望测试控制器是否可以检索项目
- 如果您只需要一个对象,而数据库中不需要该对象,请使用
。不将对象保存到数据库将使测试更快FactoryGirl.build
希望这有帮助。谢谢。我确实在使用shoulda匹配器。我将使用简短的表单!:)