こんなmodel
$ rails g scaffold user name:string, role:integer
app/models/user.rb
class User < ActiveRecord::Base
enum role: { worker: 1, manager: 0 }
validates :role,
inclusion: {in: User.roles.keys}
end
こんなテスト
spec/requests/users_spec.rb
require 'rails_helper'
RSpec.describe "Users", type: :request do
describe "POST /user" do
subject do
post users_path, user: { name:'name', role:1 }
end
it { expect{subject}.to change{User.all.size}.from(0).to(1) }
end
end
結果
1) Users POST /user
Failure/Error: @user = User.new(user_params)
ArgumentError:
'1' is not a valid role
ナンデ? きちんと intger の 1 渡したよ!?
- paramの扱いが、controllerでテストするときと異なるらしい
どうしたら良いの?
応急処置的には、JSONフォーマットで渡せば良い
.rb
#post users_path, user: { name:'name', role:1 }
post users_path, { name:'name', role:1 }.to_json, CONTENT_TYPE: 'application/json'
応急処置以外だと?
そもそも request でテストしないということを推奨している人もいる
上の人はRails4だとうまくいかないと言っていたけど、Rails5ならどう?
Rails5.0.0.1で試してみたけど再現した