Shoulda with Rspec Gem returning “undefined method `reflect_on_association' for String:Class” in belong_to test

耗尽温柔 提交于 2019-12-11 05:18:56

问题


In my rails app, I have my models Request, Service, and ServiceRequest

In my models.rb files I have:

request.rb:

class Request < ApplicationRecord

  validates_presence_of :userid, :supervisor, :status 

  has_many :servicerequests, dependent: :destroy
  accepts_nested_attributes_for :servicerequests

end

service.rb:

class Service < ApplicationRecord
  validates_presence_of :title, :responsible

  has_many :servicerequests, dependent: :destroy
end

servicerequest.rb:

class Servicerequest < ApplicationRecord
  belongs_to :request, optional: true
  belongs_to :service, optional: true
end

and the spec causing issues servicerequest_spec.rb:

require "rails_helper"

describe "ServiceRequests", :type => :model do 
  it "is valid with valid attributes"
  it "is not valid without a userid"
  it "is not valid without a request_id"
  it "is not valid without a service_id"

  it { should belong_to(:request)}
  it { should belong_to(:service)}
end

these two lines specifically:

it { should belong_to(:request)}
it { should belong_to(:service)}

I'm getting the error:

     NoMethodError:
   undefined method `reflect_on_association' for String:Class
 # /Users/criva/.rvm/gems/ruby-2.3.1@onboard/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb:21:in `reflect_on_association'
 # /Users/criva/.rvm/gems/ruby-2.3.1@onboard/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb:17:in `reflection'
 # /Users/criva/.rvm/gems/ruby-2.3.1@onboard/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_record/association_matcher.rb:825:in `reflection'
 # /Users/criva/.rvm/gems/ruby-2.3.1@onboard/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_record/association_matcher.rb:993:in `association_exists?'
 # /Users/criva/.rvm/gems/ruby-2.3.1@onboard/gems/shoulda-matchers-2.8.0/lib/shoulda/matchers/active_record/association_matcher.rb:926:in `matches?'
 # ./spec/models/servicerequest_spec.rb:10:in `block (2 levels) in <top (required)>'

I realize that shoulda doesn't have optional built in yet, but I wish to figure out a way to test it, yet keep it there.

Any help would be great in solving this mistery.

I have attempted it { should belong_to(:request).optional(true)} and it { should belong_to(:request).conditions(optional: true)} to no avail.


回答1:


Thanks to @Aguardientico for pointing out, I should have put

describe ServiceRequest instead of describe "ServiceRequests"



来源:https://stackoverflow.com/questions/40877751/shoulda-with-rspec-gem-returning-undefined-method-reflect-on-association-for

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!