2012-02-03 16 views
2

モジュールがあり、activemodelが含まれており、rspecを使ってテストしたいと思います。RSpecとActiveModel

lib/ 
|__ my_module/ 
| |__ base.rb 
|__ my_module.rb 
spec/ 
|__ my_module_spec.rb 
|__ spec_helper.rb 
|__ support/ 
     |__ shared_examples/ 
      |__ active_model.rb 

内部の 'my​​_class.rb':

require "active_model" 
require "my_module/base" 

内部の 'base.rb':

module MyModule 
    class Base 
    extend ActiveModel::Naming 

    include ActiveModel::Conversion 
    include ActiveModel::Validations 
    end 
end 

内部の「my_module_spec

これは、これまでのところ、私のセットアップがあります。 rb ':

require 'spec_helper' 

describe MyModule do 
    describe MyModule::Base do 
    it_behaves_like "ActiveModel" 
    end 
end 

内部の 'spec_helper.rb': 'active_model.rb' 内部

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) 
$LOAD_PATH.unshift(File.dirname(__FILE__)) 
require 'rspec' 
require 'my_module' 

# Requires supporting files with custom matchers and macros, etc, 
# in ./support/ and its subdirectories. 
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f} 

RSpec.configure do |config| 
end 

# taken from http://pivotallabs.com/users/jdean/blog/articles/1706-form-backing-objects-for-fun-and-profit 

shared_examples_for "ActiveModel" do 
    require 'test/unit/assertions' 
    require 'active_model/lint' 
    include Test::Unit::Assertions 
    include ActiveModel::Lint::Tests 

    before do 
    @model = subject 
    end 

    ActiveModel::Lint::Tests.public_instance_methods.map { |method| method.to_s }.grep(/^test/).each do |method| 
    example(method.gsub('_', ' ')) { send method } 
    end 
end 

私は私のセットアップは大丈夫ですが、私はbundle exec rspec specを実行しようとしたとき、私は、これらのエラーを取得していますと思いました

Failures: 

    1) MyModule MyModule::Base behaves like ActiveModel test to key 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

    2) MyModule MyModule::Base behaves like ActiveModel test to param 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

    3) MyModule MyModule::Base behaves like ActiveModel test to partial path 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

    4) MyModule MyModule::Base behaves like ActiveModel test valid? 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

    5) MyModule MyModule::Base behaves like ActiveModel test persisted? 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

    6) MyModule MyModule::Base behaves like ActiveModel test model naming 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

    7) MyModule MyModule::Base behaves like ActiveModel test errors aref 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

    8) MyModule MyModule::Base behaves like ActiveModel test errors full messages 
    Failure/Error: example(method.gsub('_', ' ')) { send method } 

私はここで間違っていますか? ActiveModelを正しくテストするにはどうすればよいですか?あなたはあまりにも多くのことをしよう事前

+0

MyModule :: Base.newに変更を加えて動作させました。 activeModel.rbでは 'before @model = subject end'は' before @model = MyModule :: Base.new'にする必要があります。 –

答えて

0

感謝。 ActiveModelライブラリをテストしたいからです。オブジェクトにこのモジュールが含まれている場合は、テストが必要です


require 'spec_helper' 

describe MyModule do 
    describe MyModule::Base do 
    it { MyModule::Base.should include(ActiveModel::Conversion) } 
    it { MyModule::Base.should include(ActiveModel::Validations) } 
    end 
end 
+0

これはおそらくより洗練された選択肢ですが、本当に欲しいのは、ActiveModelのメソッドがそれはActiveModel :: Lint :: Testsが私にとって本当に重要な理由です。しかし、アイデアをありがとう。ほんとうにありがとう。 https://github.com/datamapper/dm-active_model/blob/master/spec/amo_validation_compliance_spec.rb –

+1

あなたはDM-レールので、この仕事をどのように見ることができます。 ActiveModelのように動作するモデルを作成する場合は、ActiveModel APIに準拠する必要があります。 ActiveModel :: Lint :: Testsは、モデルがそのようなAPIに準拠していることを確認するためのものです。 – shingara

+2

のようにこれは実際には間違った答えです: –

関連する問題