Что является лучшим способом протестировать объемы в направляющих 3. В направляющих 2, я сделал бы что-то как:
Rspec:
it 'should have a top_level scope' do
Category.top_level.proxy_options.should == {:conditions => {:parent_id => nil}}
end
Это перестало работать в направляющих 3 с "неопределенным методом 'proxy_options' для []: ActiveRecord:: Отношение" ошибка.
Как люди тестируют это, объем указан с корректными опциями? Я вижу, что Вы могли исследовать ареальный объект и смогли делать некоторые ожидания по этому, но я не уверен, какой лучший способ сделать это был бы.
В идеале ваши модульные тесты должны рассматривать модели (классы) и их экземпляры как черные ящики. В конце концов, вас волнует не реализация, а поведение интерфейса.
Поэтому вместо тестирования того, что область видимости реализована определенным образом (то есть с определенным набором условий), попробуйте проверить, что она ведет себя правильно - что она возвращает экземпляры, которые должна, и не возвращает экземпляры, которых не должна.
describe Category do
describe ".top_level" do
it "should return root categories" do
frameworks = Category.create(:name => "Frameworks")
Category.top_level.should include(frameworks)
end
it "should not return child categories" do
frameworks = Category.create(:name => "Frameworks")
rails = Category.create(:name => "Ruby on Rails", :parent => frameworks)
Category.top_level.should_not include(rails)
end
end
end
Если вы напишете свои тесты таким образом, вы сможете свободно изменять факторы своих реализаций по своему усмотрению, без необходимости изменять тесты или, что более важно, не беспокоясь о том, что вы неосознанно нарушите работу вашего приложения.