Тестирование Ruby Gems под Rails - PullRequest
10 голосов
/ 06 апреля 2009

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

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

Меня также могут заинтересовать похожие решения для плагинов Rails.

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

1 Ответ

12 голосов
/ 07 апреля 2009

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

Тестирование плагинов, улучшающих 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...