2009-04-06 4 views
10

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

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

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

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

ответ

12

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

Тестирование плагинов, улучшающих активную запись, довольно просто. Вы можете use Active Record anywhere, так что все, что вам нужно сделать в этом случае, - это подключить 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 

Становится все труднее, если вы хотите протестировать действия контроллера и т. Д. My live validations plugin имеет довольно обширный набор тестов, который издевается над множеством вещей и позволяет мне просматривать представления ERb как строку, вы можете взглянуть на это.

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

+0

Это было очень полезно; благодаря! Есть ли способ сохранить ActiveRecord загружен (ala spec_server или spork), чтобы загрузка ActiveRecord и создание базы данных каждый раз не замедляли мои тесты? – Chinasaur

+0

Я уверен, что есть способ сделать это. Если вы используете хранилище файлов sqlite3, вместо хранилища памяти, которое использует мой плагин Live validations, вы можете проверить, существует ли файл базы данных .sqlite3 и не запускать миграцию, если он есть и т. Д. –

+0

Это работало довольно хорошо для меня, всего пару Примечания: 1) Я должен был добавить свои рамки тестирования (rspec) и sqlite3 как зависимости от разработки в моем gemspec (и, конечно же, рельсы как зависимость от времени выполнения), 2) Нужно требовать «рельсы» и «active_record» в моем тестовом помощнике как Что ж –

 Смежные вопросы

  • Нет связанных вопросов^_^