我有我的應用程序的控制器規範,它測試控制器上的創建方法。創建操作實際上運行正常,但規範失敗。它似乎是自動將散列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
不幸的是,這並沒有解決,我已經嘗試使用各種JSON函數來測試它。我的整個優惠券散列正在轉換爲字符串。在控制器中,當使用params.require(:coupon)時,它得到一個字符串而不是一個散列,所以它不能訪問任何散列值。 –