У меня есть следующий файл:
/spec/controllers/groups_controller_spec.rb
Какую команду в терминале я использую для запуска только этой спецификации и в каком каталоге я запускаю команду?
Мой драгоценный файл:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
Spec файл:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
ruby-on-rails
ruby
ruby-on-rails-3
rspec
AnApprentice
источник
источник
bundle exec rspec spec --help
дадим вам ответ:Ответы:
Не уверен, как долго это будет доступно, но есть конфигурация Rspec для фильтрации выполнения - так что теперь вы можете добавить это к вашему
spec_helper.rb
:А затем добавить фокус тег к
it
,context
илиdescribe
запустить только этот блок:Документация RSpec:
https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method
источник
rspec
команды для запуска спецификации с соответствующим параметром, чтобы указать, какойОбычно я делаю:
Где
42
представляет строку теста, который я хочу выполнить.EDIT1:
Вы также можете использовать теги. Смотрите здесь .
РЕДАКТИРОВАТЬ 2:
Пытаться:
источник
rspec
сбой, потому что версия в вашей системе более поздняя, чем в вашем gemfile.С граблями:
(Кредит идет к этому ответу . Идите и проголосуйте за него.)
РЕДАКТИРОВАТЬ (спасибо @cirosantilli): чтобы запустить один конкретный сценарий в спецификации, вы должны указать соответствие шаблону регулярного выражения, соответствующее описанию.
источник
SPEC=path/to/spec.rb:42
для запуска теста по заданному номеру строки, хотя кажется, что любыеit_behaves_like
тесты также будут запущены (ошибка?).Вы можете передать регулярное выражение в команду spec, которая будет запускать только
it
блоки, совпадающие с указанным вами именем.2019 Обновление: Rspec2 переключен с команды spec на команду rspec.
источник
do
послеit
,context
илиdescribe
декларации.Есть много вариантов:
источник
Мой предпочтительный метод для запуска определенных тестов немного отличается - я добавил строки
К моему файлу spec_helper.
Теперь, когда я хочу запустить один конкретный тест (или контекст, или спецификацию), я могу просто добавить к нему тег «focus» и запускать свой тест как обычно - будут выполняться только сфокусированные тесты. Если я удаляю все теги фокуса,
run_all_when_everything_filtered
запускается и запускает все тесты как обычно.Это не так быстро и просто, как параметры командной строки - для этого нужно отредактировать файл для теста, который вы хотите запустить. Но это дает вам гораздо больше контроля, я чувствую.
источник
@apneadiving answer - отличный способ решить эту проблему. Однако теперь у нас есть новый метод в Rspec 3.3. Мы можем просто запустить
rspec spec/unit/baseball_spec.rb[#context:#it]
вместо использования номера строки. Взято отсюда:Таким образом, вместо того, чтобы выполнять
rspec spec/unit/baseball_spec.rb:42
там, где это (тест в строке 42), является первым тестом, мы можем просто выполнитьrspec spec/unit/baseball_spec.rb[1:1]
или вrspec spec/unit/baseball_spec.rb[1:1:1]
зависимости от того, насколько вложенным является тестовый пример.источник
В рельсах 5,
Я использовал этот способ для запуска одного файла теста (все тесты в одном файле)
Имя класса может использоваться, чтобы соответствовать желаемому файлу
TopicsControllerTest
Мой класс
class TopicsControllerTest < ActionDispatch::IntegrationTest
Вывод :
Если хотите, вы можете настроить регулярное выражение для соответствия методу одного теста
\TopicsControllerTest#test_Should_delete\
источник
Для модели он будет запускать регистр только в строке № 5
Для контроллера: он будет запускать регистр только в строке № 5
Для модели сигнала или контроллера уберите номер строки сверху
Чтобы запустить дело на всех моделях
Запустить кейс на весь контроллер
Запустить все дела
источник
Запустите команды из корневого каталога вашего проекта:
источник
начиная с rspec 2 вы можете использовать следующее:
источник
Учитывая, что вы находитесь на проекте rails 3 с rspec 2, из корневого каталога rails:
должно определенно работать. Я устал набирать это, поэтому я создал псевдоним для сокращения «bundle exec rspec» до «bersp»
'bundle exec' таков, что он загружает точное окружение gem, указанное в вашем файле gem: http://gembundler.com/
Rspec2 переключился с команды spec на команду rspec.
источник
Я использую этот защитный камень для автоматического запуска моего теста. Он выполняет тест после создания или обновления операций над тестовым файлом.
https://github.com/guard/guard-test
или обычно вы можете запустить с помощью следующей команды
rspec spec / controllers / groups_controller_spec.rb
источник
Вы можете сделать что-то вроде этого:
источник
Ты можешь использовать
номер строки должен быть номером строки «описать» или «это», чтобы он выполнял тесты, присутствующие в этом конкретном блоке. вместо этого он выполнит все строки рядом с line_number.
Также вы можете создать блок с произвольным именем и затем выполнять только эти блоки.
источник
Другая распространенная ошибка - все еще иметь или обновить старое приложение Rails до Rails 5+ и ставить
require 'spec_helper'
вверху каждого тестового файла. Это должно быть изменено наrequire 'rails_helper'
. Если вы видите различное поведение между rake task (rake spec
) и когда вы запускаете одну spec (rspec path/to/spec.rb
), это общая причиналучшее решение состоит в том, чтобы
1) убедитесь, что вы используете
require 'rails_helper'
в верхней части каждого из ваших spec-файлов, а не в старом стилеrequire 'spec_helper'
2) используйтеrake spec SPEC=path/to/spec.rb
синтаксисна
rspec path/to/spec.rb
мой взгляд, в 2020 году сообщество должно считать устаревший стиль устаревшим (но, конечно, вы заставите его работать, если не учитывать другие соображения)источник