RSpec何时使用它应该是respond_to

时间:2016-07-25 13:58:18

标签: ruby-on-rails rspec-rails

我有两个模型按belongs_tohas_many关系链接在一起,如下所示。

Class OtherModel < ActiveRecord::Base
  belongs_to my_model
end

class MyModel < ActiveRecord::Base
  has_many other_models
end

我现在有各自的测试来验证它们是否具有如下所示的正确关系。

RSpec.describe MyModel, type: :model do
  it {should have_many(:other_models)}
  it {should respond_to(:other_models)}
end

RSpec.describe OtherModel, type: :model do
  it {should have_many(:my_model)}
  it {should respond_to(:my_model)}
end

对于这种关系,需要respond_to,如果是,为什么?它检查has_many尚未检查的内容是什么?如果在这种情况下不需要respond_to,何时适合使用它?根据我目前的理解have_many已经验证该字段是否存在,从而废弃了respond_to检查。

1 个答案:

答案 0 :(得分:1)

据我所知,你是绝对正确的。只要您使用respond_toshould have_many,就不需要should belong_to。您的代码可能看起来像这样

RSpec.describe MyModel, type: :model do
  it {should have_many(:other_models)}
end

RSpec.describe OtherModel, type: :model do
  it {should belong_to(:my_model)}
end

您还可以查看此list of RSpec Shoulda matchers

使用respond_to的最佳时间是将模块包含到类中并且要确保该类具有某种方法。例如:

Class MyModel < ActiveRecord::Base
  include RandomModule
  has_many other_models
end

module RandomModule
  def random_calculation
    3 * 5
  end
end

RSpec.describe MyModel, type: :model do
  it {should have_many(:other_models)}
  it {should respond_to(:random_calculation)}
end