Rubyists、特にRailsersは、ActiveModel::Lintについて知っています。これは、ActiveModelサブクラスを書くときに覚悟していないことを確認するのに便利な方法です。 Railsプロジェクトでは、テーブルレスモデルのためにいつも使っています。ActiveRecordのリントはありますか?
しかし、私はActiveRecordを使用して、特に両面のアソシエーションでエラーを捜すのに多くの時間を費やしています。例では、誰の愚かなこととして、やや不自然であることを例
# app/models/blog.rb
class Blog < ActiveRecord::Base
has_many :posts # so far so good...
end
# app/models/post.rb
class Post < ActiveRecord::Base
has_one :blog # incorrect - should be belongs_to
end
ください。しかし、Blog
に実際にpost_id
列がある場合はどうなりますか?予想されるところでは例外は発生しません。
私はBlog
# test/unit/blog_test.rb
require 'test/test_helper'
class BlogTest < ActiveSupport::TestCase
include ActiveRecord::Lint
end
のためのテストを書くことができるようにしたい...とテスト出力はBlog :has_many :posts, but Post does not :belong_to :blog!
のような何かを言う必要があります。それは、テーブル名、外部キーなどを扱い、考慮する必要があるでしょう:途中のモデルを介して、協会に反映する必要があります。私は、適切な単体テストは、とにかくこれらの問題を検出するが、一般的に他のテストの副作用として検出することを知っている。
これを行うプロジェクトを知っている人はいますか? (私はActiveRecord> = 3.1のみに興味があります)。私が見つけたのはactive_record_lintでしたが、実際にはこれはまったく行いません。
さらに、これらの厄介な関連が設定されていることを確認するために、既存のすべてのフィクスチャを自動的にテストすることができれば幸いです。私は通常やるだけです
test "fixtures" do
Post.all.each { |p| assert p.valid? "Fixture is broken! #{p.inspect}" }
end
しかし、確かによりエレガントな方法があります。
工場の代わりに治具を使用する場合は、そうするようにテストすることをお勧めします。すべてが簡単に壊れた器具を作り、問題を追跡しようと時間を費やすのは簡単です。 – tadman