2016-08-04 88 views
2

我有我的應用程序的控制器規範,它測試控制器上的創建方法。創建操作實際上運行正常,但規範失敗。它似乎是自動將散列POST參數轉換爲一個字符串。RSpec控制器測試將散列轉換爲字符串

let(:coupon) { attributes_for(:coupon) } 

describe 'POST #create' do 
    it 'should create a new coupon from params' do 
    expect { 
     post :create, :coupon => coupon 
    }.to change(Coupon, :count).by(1) 
    end 
end 

現在,如果我這樣做puts coupon它產生的數據的有效散列,類型是哈希值。出於某種原因,控制器正在接收params [:coupon]的字符串。只有在rspec測試中會發生這種情況,當我使用POST表單進行測試時,它工作得很好。

Rspec的拋出了以下消息:

NoMethodError: 
    undefined method `permit' for #<String:0x00000005062700> 
    Did you mean? print 

,如果我做的RSpec在puts params[:coupon].class控制器它給我的字符串。爲什麼它可能會將我的散列轉換爲POST請求的字符串,以及如何防止此問題?

我用Rails 5.0.0和RSpec 3.5.1

回答

0

看來,這是創業板open_taobao莫名其妙地轉化在測試我的職務的請求的問題。

1

此完全相同的行爲測試JSON API端點時最近發現了我。我本來這是我的題目:

subject { put :my_endpoint, **input_args } 

input_args一個整數值,漸漸轉化爲一個字符串。此修復程序是作爲一個額外的關鍵字參數添加到format: 'json'put

subject { put :my_endpoint, **input_args, format: 'json' } 
+0

不幸的是,這並沒有解決,我已經嘗試使用各種JSON函數來測試它。我的整個優惠券散列正在轉換爲字符串。在控制器中,當使用params.require(:coupon)時,它得到一個字符串而不是一個散列,所以它不能訪問任何散列值。 –

相關問題