Вот замечательный образец, который наиболее точно соответствовал проверке, которую мне нужно было достичь. Я не являюсь оригинальным автором, но думаю, что это стоит того, что я считаю эту проблему очень сложной и без кратких или широко полезных ответов.
Следующее регулярное выражение будет использовать широко используемые числа и характер комбинаций в различных форматах телефонных номеров:
/^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm
Положительный: +42 555.123.4567 + 1- (800) -123-4567 +7 555 1234567 +7 (926) 1234567 (926) 1234567 +79261234567 926 1234567 9261234567 1234567 123-4567 123-89-01 495 1234567 469 123 45 67 89261234567 8 (926) 1234567 926.123.4567 415-555-1234 650-555-2345 (416) 555-3456 202 555 4567 4035555678 1 416 555 9292
Отрицательный: 926 3 4 8 800 600-APPLE
Исходный источник: http://www.regexr.com / 38pvb
Учитывая, что это пример совместного использования контроллера, вы можете использовать следующее:
shared_examples 'my spec' do
it 'will not redirect' do
get path
expect(response).to render_template(request.params['action'])
end
end
Rspec.describe 'MySpec' do
it_behaves_like 'my spec' do
let(:path) { new_user_path }
end
end
В контексте вашего пользовательского контроллера тест будет:
it 'will not redirect' do
get new_user_path # => get '/users/new'
expect(response).to render_template('new')
end
RSpec's render_template
matcher нужно только действие.