Я разрабатываю модель для записей со следующими ограничениямиRails модель не формат проверки, регулярное выражение
class Recording < ActiveRecord::Base
attr_accessible :agent_id, :confirmation, :filepath, :phone, :call_queue_id, :date
belongs_to :call_queue
PHONE_FORMAT = /^[0-9]+$|Unavailable/
validates_presence_of :call_queue_id, :agent_id, :phone, :filepath, :date
validates :phone, format: { with: PHONE_FORMAT }
end
и пытаюсь проверить его с помощью следующей спецификации
describe Recording do
let(:queue) { FactoryGirl.create(:call_queue) }
before { @recording = queue.recordings.build(FactoryGirl.attributes_for(:recording)) }
subject { @recording }
# Stuff omitted...
describe "phone" do
it "should be present" do
@recording.phone = ''
@recording.should_not be_valid
end
context "with a valid format" do
it "should only consist of digits" do
@recording.phone = 'ab4k5s'
@recording.should_not be_valid
end
it "should only match 'Unavailable'" do
@recording.phone = 'Unavailable'
@recording.should be_valid
end
end
end
end
Первые два тесты проходят, но третий не может со следующим:
Failure/Error: @recording.should be_valid
expected valid? to return true, got false
Я проверил мое регулярное выражение с rubular, чтобы убедиться, что он работает, а затем снова используйте irb, чтобы быть уверенным. Я действительно смущен, почему это терпит неудачу.
EDIT:
В конце концов я получил спецификации передать, изменив свое before
заявление в RSpec:
describe Recording do
let(:queue) { FactoryGirl.create(:call_queue) }
before(:each) { @recording = queue.recordings.create(FactoryGirl.attributes_for(:recording) }
# the rest is the same...
, который в конечном счете имеет смысл для меня, в точку. Была ли причина, по которой все перепуталось (фальши вернулись, и наоборот), потому что, как только атрибут сделал запись недействительной, я не мог изменить ее снова? Кажется, так было, я просто хочу убедиться.
При отсутствии слэша? Нужны ли мне какие-либо кавычки? –
Я добавил, что с прямыми косыми чертами и получил ту же ошибку, что и раньше –
@BradRice Yeh, которая была опечаткой, должна быть слэш (исправлена). Кажется, я не могу воспроизвести ошибку, полученную вами ... – veritas1