2016-02-22 2 views
0

Построение рельсов 4.2 приложения, и я довольно новичок в TDD, но я действительно работаю над его изучением, и я не могу понять, почему ниже тест проходит.Тестирование, когда оно не должно быть на условной валидации

def setup 
    @lead = Lead.new(first_name: "Joe", last_name: "Blow", email: "[email protected]", phone: "555 555 5555", 
      number_of_rooms: 5) 
end 
... 
... 

test "should have origin state if origin country is United States" do 
    @lead.origin_country_id = Country.create!(name: "United States").id 
    @lead.origin_state_id = nil 
    assert_not @lead.save 
end 

Мой файл модели ниже:

class Lead < ActiveRecord::Base 
    validates :origin_country_id, presence: true 
    validates :destination_country_id, presence: true 
    belongs_to :origin_state, class_name: 'State', foreign_key: 'origin_state_id' 
    belongs_to :destination_state, class_name: 'State', foreign_key: 'destination_state_id' 
    belongs_to :origin_country, class_name: 'Country', foreign_key: 'origin_country_id' 
    belongs_to :destination_country, class_name: 'Country', foreign_key: 'destination_country_id' 
end 

Как я уже сказал, я новичок в TDD, так что если это плохой тест, пожалуйста, дайте мне знать, как вы бы улучшить. В основном, это используется, чтобы цитировать людей для доставки товаров на международном уровне, поэтому у меня есть страна происхождения и страна назначения, и мне нужно проверить, что страны с государствами заполняют поле штата при отправке данных. Страна - это модель с просто именем, государство - это модель с идентификатором страны и относится к стране.

ответ

0

Вы подтверждаете наличие origin_country_id, но не наличие origin_state_id. В вашем тесте вы устанавливаете значение origin_country_id, но поскольку вы не проверяете origin_state_id, вы говорите, что Rails nil является приемлемым значением для этого поля.

+0

так как я могу изолировать страну происхождения в своем тесте, чтобы гарантировать, что государство присутствует, если страна является Соединенными Штатами? – user3562355

+0

Речь идет не об изоляции страны. Вы не проверяете наличие идентификатора состояния вообще. У вас есть 2 'validates', ни один из которых не используется для' state'. –

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