associations - Rails/Rspec-编写有关belongs_to关联的类名称的规范

标签 associations rspec-rails

给出以下代码:

(1)您将如何编写规范以测试home_team和away_team的类名称应为Team类?

(2)您是否还要编写这样的规范?我不确定这样做是否有值(value),但想引起您的注意。

class Event < ActiveRecord::Base

  belongs_to :home_team, :class_name => 'Team', :foreign_key => :home_team_id
  belongs_to :away_team, :class_name => 'Team', :foreign_key => :away_team_id

end

describe Event do

  it { should belong_to(:home_team) }
  it { should belong_to(:away_team) }

end

如果shoda应该有以下内容,那就太好了:
it { should belong_to(:home_team).with_class_name(:team) }

最佳答案

这是一篇关于为什么不应该这样做的博客文章:

http://blog.davidchelimsky.net/2012/02/12/validations-are-behavior-associations-are-structure/

总而言之,关联是您的应用程序的结构。 RSpec旨在测试行为。因此,如果为从home_team或away_team派生的行为编写测试,可能会更好。

例如,如果您需要home_team的名称。如果编写这样的方法会更好:

def home_team_name
  home_team.name
end

这是事件类向home_team请求的行为。您可以编写一个规范,例如:
describe '#home_team_name' do
  before do
    @home_team = Team.new(:name => 'The Home Team')
    @event = Event.new(home_team_id: @home_team.id)
  end

  it 'should return the name of the home team' do
    @event.home_team_name.should == 'The Home Team'
  end
end 

这将是测试关联行为的一个很好的示例,而无需直接测试应用程序的结构。

同样,Rails希望home_team是“Team”类,并且不需要测试框架,它已经过了很好的测试和记录。我可以看到的唯一方法是暂时的,如果您需要提高对分类法工作方式的理解。

关于associations - Rails/Rspec-编写有关belongs_to关联的类名称的规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123218/

相关文章:

ruby-on-rails - ActiveRecord 何时会保存关联?

java - 我应该如何模拟类之间的关联

ruby-on-rails - before_destroy 不是从 update_attributes 触发的

ruby-on-rails - 多对多 : has_many :through and User table relation issue in rails 4

ruby-on-rails - Rails Rspec 测试 html 选择选项

ruby-on-rails - 为什么我的 RSpec 未加载 Devise::Test::ControllerHelpers?

ruby-on-rails - 是否值得测试诸如范围之类的低级代码?

ruby-on-rails - 定义一个 :class_name with a string or a symbol in Rails 3

ruby-on-rails - RSpec 功能规范找不到 Rails 引擎的路由

ruby-on-rails - 命名空间 Controller 上的 Rspec Controller 规范找到具有相同名称的全局 Controller