У меня есть TopicsController
с действием new
:
def new
@section = Section.find(params[:section_id])
@topic = @section.topics.build
end
Пытаясь протестировать это простое поведение, я получил довольно уродливую и надежную фиктивную структуру
describe "#new" do
it "builds a topic with a given section" do
new_topic = mock_model(Topic)
topics = mock('topics')
topics.should_receive(:build).and_return(new_topic)
section = mock_model(Section)
section.should_receive(:topics).and_return(topics)
Section.should_receive(:find).with("1").and_return(section)
get :new, :section_id => 1
assigns[:topic].should == new_topic
end
end
Я бы хотел упростить этот код, но я не понимаю, как это сделать.Я не могу избавиться от макета @section
, и он должен возвращать что-то конкретное в цепочечном вызове .topics.build
, чтобы позволить мне установить ожидание.
Есть ли более простой способсделать это? Я использую RSpec 2.7.