2014-01-24 50 views
0

我現在讓我的測試通過,但我想看看我是否可以重構一個let(:message)測試或某種變量Rspec的和FactoryGirl.attributes_for PARAMS重構

梅勒的測試

describe "Contact Form" do                               

    context "when a valid message" do                             

     it "sends an email" do                               
     post contact_create_path, message: FactoryGirl.attributes_for(:message)                  
     expect(ActionMailer::Base.deliveries.last.to).to eq(["#{ENV["MVP_USERNAME"]}"])                
     end                                    
    end  

我想要重構的部分是message: FactoryGirl.attributes_for(:message)。 我試圖做這樣的事情

context "when a valid message" do 
    let(:message) { FactoryGirl.attributes_for(:message) }   
    it "sends an email" do                               
     post contact_create_path, message                  
     expect(ActionMailer::Base.deliveries.last.to).to eq(["#{ENV["MVP_USERNAME"]}"])                
    end 

但輸出 ActionController::ParameterMissing: param not found: message

其他企圖

@message = FactoryGirl.attributes_for(:message)

message = FactoryGirl.attributes_for(:message)

我可以離開它這樣,但我覺得,我應該改變一些r陳奕迅。建議?

回答

0

它看起來並不需要重構給我,但麻煩的是,你在let聲明中的版本只是屬性的哈希。它缺少:message密鑰。

let(:message) { message: FactoryGirl.attributes_for(:message) } 

這應該有效,但正如我所說我認爲你不需要重構它。我實際上只是確保將FactoryGirl語法方法混合到您的規格中,因此您可以直接刪除FactoryGirl並僅使用attributes_for

在你規範幫手:

RSpec.configure do |config| 
    config.include FactoryGirl::Syntax::Methods 
end