Тестирование Ruby Gems под Rails

Я создаю некоторые драгоценные камни, которые можно использовать в Rails-контроллерах и представлениях. Я бы хотел иметь возможность самостоятельно тестировать драгоценные камни. Но я не смог понять, как создать экземпляр Rails внутри драгоценного камня, чтобы проверить, что камень будет работать внутри приложения Rails.

Я очень предпочитаю использовать RSpec, но, возможно, может адаптировать решение Test:: Unit или просто использовать Test:: Unit.

Мне также будут интересны аналогичные решения для плагинов Rails.

(Я попробовал Googling, но "rails gem testing" показывает мне драгоценные камни, которые используются для тестирования, а не как тестировать драгоценный камень. Я почти уверен, что видел статью или 2 по этой теме.)

Ответ 1

Взгляните на другие плагины (плагины и драгоценные камни, одни и те же вещи).

Тестирование плагинов, улучшающих Active Record, довольно просто. Вы можете использовать Active Record в любом месте, поэтому все, что вам нужно сделать в этом случае, - подключить Active Record к базе данных (например, в памяти база данных sqlite) и проверьте свой код.

# test/test_helper.rb
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
require 'your_thing'

ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")

ActiveRecord::Schema.define(:version => 1) do
  create_table :posts do |t|
    t.string :title
    t.text :excerpt, :body
  end
end

class Post < ActiveRecord::Base
  validates_presence_of :title
end

# test/my_test.rb
require 'test_helper'

class MyTest < Test::Unit::TestCase
  def test_thing
    # use Post here
  end
end

Это становится сложнее, если вы хотите протестировать действия контроллера и т.д. Мой плагин для проверки подлинности имеет довольно обширный набор тестов, который издевается над множеством вещей и позволяет мне просматривать представления ERb как строку, вы можете взять посмотрите на это.

Адаптация этих примеров Test:: Unit к RSpec должна быть тривиальной, поскольку они не контрейлерируют что-либо в Test:: Unit.