컨트롤러 작성 작업을 통해 새 블로그 게시물을 만들고 게시물이 성공적으로 저장되면 추가 방법을 실행합니다.RSpec에서 컨트롤러에서 작성 작업을 호출하는 방법
내가 만들고 싶은 게시물에 대한 매개 변수가있는 별도의 공장 소녀 파일이 있습니다. FactoryGirl.create는 내 컨트롤러의 create 액션이 아니라 ruby create 메소드를 호출합니다.
RSpec의 컨트롤러에서 작성 작업을 호출하려면 어떻게해야합니까? 그리고 어떻게 내 공장 여자 패러미터를 보내겠습니까 factories.rb
파일?
posts_controller.rb
def create
@post = Post.new(params[:post])
if @post.save
@post.my_special_method
redirect_to root_path
else
redirect_to new_path
end
end
사양/요청/post_pages_spec.rb
it "should successfully run my special method" do
@post = FactoryGirl.create(:post)
@post.user.different_models.count.should == 1
end
post.rb
def my_special_method
user = self.user
special_post = Post.where("group_id IN (?) AND user_id IN (?)", 1, user.id)
if special_post.count == 10
DifferentModel.create(user_id: user.id, foo_id: foobar.id)
end
end
end
FactoryGirl이 무엇인지에 대해 조금 혼란 스럽습니다. 데이터베이스에서 데이터를 생성하기위한 것이지 컨트롤러 작업을 호출하는 것이 아닙니다. 그리고'post_pages_spec.rb'에서 여러분이 묘사 한 것은 실제 요청 사양이 아닌 Post 모델의 단위 테스트와 같습니다. 컨트롤러 액션을 명시 적으로 호출하는 것은 컨트롤러 사양에서만 수행되며 이렇게 수행됩니다. https://www.relishapp.com/rspec/rspec-rails/v/2-13/docs/controller-specs – sevenseacat
감사합니다 sevenseacat. 명확성을 위해'my_special_method'에 대한 정의를 추가했습니다. 보시다시피,이 메소드는 데이터베이스에 저장된'special_posts '의 수를 센다. 9 개의 이전 게시물을 작성하는 rspec에 이전 블록이 있습니다. 나는 10 번째 게시물이 새로운'differentmodel' 객체를 생성하도록합니다. – umezo
다시 요청 사양이 아닙니다. 명시 적으로 컨트롤러 동작을 호출하는 것은 컨트롤러 사양뿐입니다. – sevenseacat