gpt4 book ai didi

ruby-on-rails - 使用 Rspec 测试存在和所属关系

转载 作者:行者123 更新时间:2023-12-04 05:58:02 25 4
gpt4 key购买 nike

我正在尝试学习如何使用 Rspec 进行测试。

目前我有一个 Item 类的规范:

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

不过,我对此有几个问题。

it { should validate_presence_of :name }和写一样:
describe "when name is not present" do
before { @item.name = "" }
it { should_not be_valid }
end

或者两者之间有关键区别吗?

我也想知道是否 it { should belong_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)如下所示:
class Item
belongs_to :list
validate_presence_of :name
end

如果有人更改了这些行中的任何一行,它将显示在测试中。

所以恕我直言,他们确实值得编写规范,而且工作量也不大。

其次:是的, should validate_presence_of确实类似于较大的形式,但我发现较短的形式更具表现力。请使用简写形式!

第三:FactoryGirl的区别:
  • 使用 FactoryGirl.create如果对象需要存在于数据库中,例如因为您想测试您的 Controller 是否可以检索项目。
  • 使用 FactoryGirl.build如果您只需要一个对象,并且不需要该对象存在于数据库中。不将对象保存到数据库将使您的测试更快。

  • 希望这可以帮助。

    关于ruby-on-rails - 使用 Rspec 测试存在和所属关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923564/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com