rails rspec – (第二次测试)预期响应是,但是

预期的响应是,但是

我的测试有:

describe "Link POST #create" do context "with valid attributes" do it "creates a new link" do expect{ post :create, link: FactoryGirl.create(:link, :group => @group) }.to change(Link,:count).by(1) end it "redirects to the new link" do post :create, link: FactoryGirl.create(:link, :group => @group) # response.should redirect_to @link # Link.unscoped.last response.should redirect_to Link.unscoped.last # render_template :show end end 

第一次测试通过,但第二次测试失败。

我的代码是:

  def create @link = Link.new(params[:link]) respond_to do |format| if @link.save flash[:notice] = 'Link was successfully created.' format.html { redirect_to(@link) } format.xml { render :xml => @link, :status => :created, :location => @link } else @selected_group = params[:group_id] format.html { render :action => "new" } format.xml { render :xml => @link.errors, :status => :unprocessable_entity } end end end 

我尝试过重定向和渲染,但无法通过第二次测试。

这是应该使它工作的东西:

 describe "Link POST #create" do context "with valid attributes" do def do_post( format = 'html' ) attributes = FactoryGirl.build(:link).attributes.merge( :group_id => @group.id ) post :create, :link => attributes, :format => 'html' end it "creates a new link" do expect{ do_post }.to change(Link,:count).by(1) end it "redirects to the new link" do do_post response.should redirect_to( assigns[:link] ) end end 

第一个规范只是因为你正在调用FactoryGirl.create,所以从控制器创建了一条记录,但很可能是控制器调用无效。