2012-06-14 2 views
2

응용 프로그램 : Sinatra + ActiveRecord
모범 사례를 사용하여 연결 존재 여부를 테스트하려고합니다.비 Rails 응용 프로그램에서 Shoulda와 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)>' 

어떤 힌트가 있습니까?
연관 테스트는 Rails 앱에서만 작동합니까 (rspec-rails 포함)?
감사합니다.

답변

0

다른 답변에서 언급했듯이 ActiveRecord 연결이 설정되기 전에 shoulda-matchers이 Sinatra에 포함되기 전에 이런 문제가 발생합니다. 당신의 Gemfile에

,과 같이, require: false을 추가해야합니다 :

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

이 다른 것이 완료되기 전에 자동으로 보석을 필요로에서 응용 프로그램을 방지 할 수 있습니다.

spec/spec_helper.rb에 먼저 앱 (active_record이 포함되어 있고 연결이 설정되어 있음)을 요구 한 다음 나중에 파일에 shoulda-matchers이 필요합니다.예를 들어 :

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

지금 당신은 평소와 같이 귀하의 사양에 매처 (matcher)를 사용할 수 있습니다

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

야호를!

1

Gemfile에 shoulda-matchers 보석을 추가 했습니까? https://github.com/thoughtbot/shoulda-matchers


업데이트 :

spec_helper.rb 구성에 require 'shoulda/matchers를 추가합니다.

+0

예, 그렇지만 여전히 기쁨은 ... – jgpawletko

+0

또 다른 아이디어가 있는데, 'spec_helper.rb'에'shoulda/matchers '를 요구하십시오. – luacassus

0

RSpec을 사용하지는 않지만 비슷한 문제가있었습니다. 그래도 Sinatra와 ActiveRecord를 사용하고 있습니다.

필자의 경우, 테스트 클래스를 ActiveSupport::TestCase에서 상속하는 것에서 Test::Unit::TestCase으로 상속하는 것으로 변경해야했습니다.

어쨌든 ActiveSupport::TestCase 기능을 사용하지 않아서 정상적으로 작동했습니다. 나는 이것이 실제로 당신의 유스 케이스는 아니라는 것을 알고 있지만 어쩌면 그것은 올바른 방향으로 당신을 가리키고 Test::Unit을 사용하는 다른 사람을 돕는다.

0

우리는 비슷한 문제가 있었고 비 Rails 응용 프로그램에서 작업하고있었습니다.

우리가 실제로 응용 프로그램을 요구하기 전에 'shoulda-matchers'를 요구했기 때문에 문제가 발생했습니다. 이는 보석이 ActiveRecord :: Base를 찾고 있었고 찾을 수 없다는 것을 의미했습니다.

우리는 먼저 응용 프로그램을 요구하고 그 후에 'shoulda-matchers'를 요구함으로써 문제를 해결했습니다. 바보.

관련 문제