Ответ 1
Мои 2 цента:
Используйте Стейк вместо Огурца. Это RSpec по своей сути, это просто и выполняет эту работу.
https://github.com/cavalle/steak
Capybara позволяет использовать разные драйверы. Некоторые драйверы поддерживают javascript, работают с браузером, быстрее, медленнее и т.д. Используйте лучший драйвер для спецификации, которую вы тестируете с помощью Swinger:
https://github.com/jeffkreeftmeijer/swinger
Я использую свою собственную вилку Akephalos - драйвер, который работает быстро, поддерживает javascript, UTF-8 (это то, что добавляет моя вилка) и не нуждается в внешнем браузере.
https://github.com/Nerian/akephalos2
Хорошей практикой для RSpec является использование "Контекста". Спросите меня, нужны ли вам разъяснения. Также обратите внимание на метод let. Он возвращает все, что возвращает блок. Он полезен для объявления ложного объекта внутри и использования их на образцах..
feature "Course" do
let(:school) {School.make!}
context "Loged in" do
before(:each) do
switch_to_subdomain(school)
end
context "In the new course form" do
before(:each) do
click_link("Courses")
click_link("New course")
end
scenario "New course" do
end
scenario "A Course without name should not be accepted" do
end
scenario "A new course should not be created if there is another one with the same name in the same school" do
end
end
end
end
Кроме того, книга: RSpec Book, Pragmatic Programmers - очень хороший ресурс для того, чтобы инициировать себя в отношении основных концепций RSpec, Capybara, Cucumber и всего этого поведения, управляемого поведением:)
Edit:
Кроме того, я использую Machinist2 для светильников. https://github.com/notahat/machinist
Отлично работает. Лучше, чем Factory девушка.
Существует также Fabricator, который имеет отличный веб-сайт и очень удобный DSL.
https://github.com/paulelliott/fabrication
Вы можете использовать Machinist с Forgery для создания интеллектуальных данных.
https://github.com/sevenwire/forgery
School.blueprint do
name { "Pablo de olavide"}
end
Student.blueprint do
first_name { Forgery::Name.first_name}
last_name { Forgery::Name.last_name }
school { School.make! }
end
Вы можете комбинировать это с задачей Thor, чтобы заполнить вашу базу данных разработки, чтобы увидеть приложение, как его увидит конечный пользователь.
def populate
require File.expand_path('config/environment.rb')
require File.expand_path('spec/support/blueprints.rb')
drop
puts "populating database"
1.times do |num|
school = School.make!
50.times do
Student.make!(:school => school)
end
5.times do
Course.make!(:school => school)
Professor.make!(:school => school)
end
end
end
Документация RSpec 2 имеет много примеров:
Кроме того, этот пост дает много других советов:
http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/
Другое сообщение с очень хорошим советом:
http://flux88.com/2011/05/dry-up-your-rspec-files-with-subject-let-blocks/
Оптимизация времени выполнения тестов:
http://blog.leshill.org/blog/2011/10/23/fast-specs.html
http://jeffkreeftmeijer.com/2011/spec-helpers-bundler-setup-faster-rails-test-suites/