2

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

    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)?
谢谢大家的时间。

4

4 回答 4

1

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


更新:

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

于 2012-06-15T08:51:06.330 回答
0

我有一个类似的问题,虽然我没有使用 RSpec。不过仍然使用 Sinatra 和 ActiveRecord。

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

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

于 2012-11-21T17:14:42.040 回答
0

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

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

我们通过首先要求应用程序然后要求'shouda-matchers'来解决问题。愚蠢的。

于 2013-10-11T23:32:09.970 回答
0

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

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

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

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

然后在spec/spec_helper.rbactive_recordshoulda-matchers. 例如:

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

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

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

耶!

于 2014-01-21T15:47:38.397 回答