Railsは
boolean | number |
---|---|
true | 1 |
false | 0 |
としてboolean型を扱うようです。
viewのチェックボックスで、1と0のそれぞれを値として与えていました。
<%= f.radio_button :require_auth, 1, checked: @page.auth %> %> <%= f.radio_button :require_auth, 0, checked: @page.auth.blank? || !page.require_auth %>
これで上記の表のように変換されることは知っていたのですが、Rspecのテストでも変換されるのでexpectに与えるものに気をつける必要がありますね。
describe "PATCH #update" do let(:page) { create(:page) } before do @edit_attr = page.attributes @edit_attr[:url] = 'change' @edit_attr[:title] = 'change_title' @edit_attr[:body] = 'change_body' @edit_attr[:auth] = 1 #これがtrueに変換される end subject { patch :update, id: page.id, page: @edit_attr } it "変更が反映されていること" do subject page = Page.find(page.id) expect(page).to have_attributes( url: @edit_attr[:url], title: @edit_attr[:title], body: @edit_attr[:body], auth: true) #ここを他と同じように@edit_attr[:auth]にすると1→trueに変換されるのでerrorが起きる。 end end
1で代入してもtrueに変換されるので、expectでもtrueを参照する必要がありますね!

- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る
コメントを残す