【问题标题】:Testing ActiveRecord associations with Shoulda in non-Rails app在非 Rails 应用程序中测试与 Shoulda 的 ActiveRecord 关联
【发布时间】:2012-06-17 14:48:14
【问题描述】:

应用:Sinatra + ActiveRecord
尝试使用最佳实践测试关联的存在。
我真的很喜欢 Shoulda 语法:

    describe Bar do
      it { should belong_to(:foo) }
    end

但是,RSpec 似乎找不到 belong_to 方法。

    1) ResOutcome 
       Failure/Error: it { should belong_to(:foo) }
       NoMethodError:
         undefined method `belong_to' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000103ac6760>
       # ./spec/models/bar_spec.rb:48:in `block (2 levels) in <top (required)>'

有什么提示吗?
Shoulda 关联测试是否仅适用于 Rails 应用程序(使用 rspec-rails)?
谢谢大家的时间。

【问题讨论】:

    标签: activerecord rspec sinatra shoulda


    【解决方案1】:

    您是否将shoulda-matchers gem 添加到您的Gemfile 中? https://github.com/thoughtbot/shoulda-matchers


    更新:

    require 'shoulda/matchers 添加到您的spec_helper.rb 配置中。

    【讨论】:

    • 我有另一个想法,试试require 'shoulda/matchers' in spec_helper.rb
    【解决方案2】:

    正如其他答案所提到的,发生这种情况是因为在您的 ActiveRecord 连接建立之前包含shoulda-matchers,至少在 Sinatra 上是这样。

    在您的 Gemfile 中,请务必添加 require: false,如下所示:

    gem "shoulda-matchers", "~> 2.4.0", require: false
    

    这可以防止应用在完成任何其他操作之前自动要求 gem。

    然后在您的spec/spec_helper.rb 中,首先要求您的应用程序(其中active_record 大概包含并建立了连接),然后稍后在文件中,手动要求shoulda-matchers。例如:

    require File.dirname(__FILE__) + '/../the_app_itself'
    require 'shoulda-matchers'
    

    现在您可以像往常一样在规范中使用匹配器:

    describe LouieGeetoo do
      it { should have_many(:video_games) }
    end
    

    耶!

    【讨论】:

      【解决方案3】:

      虽然我没有使用 RSpec,但我也遇到了类似的问题。不过仍在使用 Sinatra 和 ActiveRecord。

      就我而言,我需要将测试类从继承自 ActiveSupport::TestCase 更改为继承自 Test::Unit::TestCase

      反正我没有使用ActiveSupport::TestCase 功能,所以它工作正常。我意识到这并不是您真正的用例,但它可能会为您指明正确的方向并帮助使用Test::Unit 的其他人。

      【讨论】:

        【解决方案4】:

        我们遇到了类似的问题,并且正在使用非 Rails 应用程序。

        我们的问题原来是因为我们在实际需要我们的应用程序之前尝试需要“should-matchers”,这意味着 gem 正在寻找 ActiveRecord::Base 但找不到它。

        我们解决了这个问题,首先需要应用程序,然后再需要“should-matchers”。愚蠢的。

        【讨论】:

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