RSPEC be_valid не действует последовательно
Большая часть моего теста работает, но по какой-то причине FactoryGirl.build ... не следует в конце этого утверждения
describe "exceed the maximum number of subscriptions" do
@user = FactoryGirl.create(:user)
loop_count = GlobalVar::MAX_SUBSCRIPTIONS
loop_count.times do
@topic = FactoryGirl.create(:topic)
@subscription = FactoryGirl.create(:subscription, topic: @topic, user: @user)
end
@topic = FactoryGirl.create(:topic)
FactoryGirl.build(:subscription, topic: @topic, user: @user).should_not be_valid
end
В той же спецификации это проходит успешно:
it "has a maximum length bio" do
FactoryGirl.build(:user, bio: "a"*251).should_not be_valid
end
Вот начало ошибки, которую я получаю:
(druby://192.168.1.118:53053) C:/Sites/mavens/spec/models/user_spec.rb:42:in `block (3 levels) in <top (required)>': undefined local variable or method `be_valid' for #<Class:0x7e49290> (NameError)
from (druby://192.168.1.118:53053) C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
Я использую Spork и Guard для тестирования. У меня FactoryGirl перезагружается в spec_helper для каждого запуска. Перезапустили spork несколько раз, и он не работает с перезапуском. Дайте мне знать, будет ли полезен какой-либо из моих дополнительных кодов, и, как всегда, большое спасибо за помощь!!
1 ответ
Решение
Вам нужно поставить тесты внутри it
блоки:
describe "exceed the maximum number of subscriptions" do
it do
user = FactoryGirl.build(:user)
GlobalVar::MAX_SUBSCRIPTIONS.times do
topic = FactoryGirl.build(:topic)
FactoryGirl.build(:subscription, topic: topic, user: user)
end
topic = FactoryGirl.build(:topic)
FactoryGirl.build(:subscription, topic: topic, user: user).should_not be_valid
end
end
Это связано с тем, как RSpec обрабатывает контекст DSL.