2013-06-24 57 views
0

我有很多这样的代码:DRY在控制器测试

context 'with invalid attributes' do 
    it "does not save link to database" do 
    post :create, board_id: @board, link: FactoryGirl.attributes_for(:link, url: "") 
    expect(@board.links.count).to eq 0 
    end 

    it 're-render :new template' do 
    post :create, board_id: @board, link: FactoryGirl.attributes_for(:link, url: "") 
    expect(response).to render_template :new 
    end 

    it 'sets an error flash message' do 
    post :create, board_id: @board, link: FactoryGirl.attributes_for(:link, url: "") 
    expect(flash[:error]).to_not be_nil 
    end 
end 

如何我干呢?所以我不会在每种情况下都有post :create, board_id: @board, link: FactoryGirl.attributes_for(:link, url: "")行?

回答

1

你可以尝试before(:each)

context 'with invalid attributes' do 
    before(:each) do 
    post :create, board_id: @board, link: FactoryGirl.attributes_for(:link, url: "") 
    end 

    it "does not save link to database" do 
    expect(@board.links.count).to eq 0 
    end 

    it 're-render :new template' do 
    expect(response).to render_template :new 
    end 

    it 'sets an error flash message' do 
    expect(flash[:error]).to_not be_nil 
    end 
end  
+0

我做错了什么,因为我有它这样早,没有工作,这一次它工作正常。这是一种神奇:),谢谢。 –