【问题标题】:Shoulda with Rspec Gem returning "undefined method `reflect_on_association' for String:Class" in belong_to test应该在belong_to测试中使用Rspec Gem返回“未定义的方法`reflect_on_association' for String:Class”
【发布时间】:2016-11-29 23:35:16
【问题描述】:

在我的 rails 应用程序中,我有我的模型 RequestServiceServiceRequest

在我的 models.rb 文件中:

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

以及引起问题的规范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

这两行具体:

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

我收到了错误:

     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)>'

我意识到应该还没有内置optional,但我希望找到一种方法来测试它,但仍然保留它。

任何帮助都将有助于解决这个谜团。

我尝试了it { should belong_to(:request).optional(true)}it { should belong_to(:request).conditions(optional: true)} 无济于事。

【问题讨论】:

  • 如果你使用describe "ServiceRequests"而不是describe ServiceRequest呢?
  • facepalm 谢谢....效果很好。

标签: ruby-on-rails testing rspec shoulda


【解决方案1】:

感谢@Aguardientico 指出,我应该把

describe ServiceRequest 而不是describe "ServiceRequests"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多