2013-02-13 2 views
1

Я разрабатываю модель для записей со следующими ограничениями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... 

, который в конечном счете имеет смысл для меня, в точку. Была ли причина, по которой все перепуталось (фальши вернулись, и наоборот), потому что, как только атрибут сделал запись недействительной, я не мог изменить ее снова? Кажется, так было, я просто хочу убедиться.

ответ

0

попробовать:

PHONE_FORMAT = /^([0-9]+|Unavailable)$/ 
+0

При отсутствии слэша? Нужны ли мне какие-либо кавычки? –

+0

Я добавил, что с прямыми косыми чертами и получил ту же ошибку, что и раньше –

+0

@BradRice Yeh, которая была опечаткой, должна быть слэш (исправлена). Кажется, я не могу воспроизвести ошибку, полученную вами ... – veritas1

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