Ruby on rails 使用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_

我正在尝试学习如何使用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_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匹配器。我将使用简短的表单!:)