我对控制器上的 create 方法进行了以下测试
before :each do
request.env["HTTP_ACCEPT"] = 'application/json'
request.env["CONTENT_TYPE"] = "application/json"
end
test "should post create" do
params = {
trip_id: 1,
schedule: {
price: 12.50,
max_size: 1,
time: "11:00 am",
wdays: [0,1]
}
}
post :create, params
assert_response :success
end
当这达到我的创建方法时, params[:schedule][:wdays] 从 [0,1] 更改为 ["0", "1"]
这会导致我的测试失败,因为 wdays 必须是一个 int 数组。我曾考虑在验证中做一个 .to_i ,但这将允许 ["hello", "world"] 变为 [0,0]。
奇怪的是,这个 curl 命令,我认为它会做同样的事情,工作得很好
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"trip_id":1, "schedule":{"price":12.50,"max_size":1,"wdays":[0,1],"time":"11:00 am"}}' http://localhost:3000/trips/1/schedules
如何让我的测试像 curl 一样将数组保留为 int 数组?
如果我不能让这个功能在测试中正常工作,我应该更改我的验证以允许一串数组吗?如果我这样做,我应该如何防止像“hello”这样的字符串有效?
这是我目前的验证:
def valid_wdays
if !wdays.is_a?(Array) || wdays.detect { |d| !(0..6).include?(d) }
errors.add(:wdays, "should be an array of ints represeting days of the week")
end
end