ruby-on-rails - 更新/重新分配值字段:让Rspec中的变量
问题描述
是否有正确的方法来编辑由 :let 创建的变量并调用它?
describe "#create" do
let(:animal_payload) {
{
"data": {
......
"animal_type": {
"data": {
"id": 1,
"type": "sea",
}
},
}
}
}
let(:land_animal_payload) {animal_payload}
:land_animal_payload["data"]["animal_type"] = {data:[{"id":1, "type":land}]}
context "when animal is type land" do
subject { post :create, params: land_animal_payload }
it "should create a land animal" do
....
end
end
我有一个非常大的有效载荷,称为 animal_payload。我只想更改字段 animal_type 并在其上发帖。但是,当我这样称呼时: :land_animal_payload["data"]["animal_type"] = {data:[{"id":1, "type":land}]}
我得到:
`undefined method `[]' for nil:NilClass
如何使用相同的有效负载但稍微更改其中一个字段以便我可以调用它?
解决方案
您要做的是在 let 变量中使用 let 变量:
describe "#create" do
subject { post :create, params: animal_payload }
let(:animal_payload) {
{
"data": {
......
"animal_type": {
"data": {
"id": 1,
"type": animal_type,
}
},
}
}
}
context 'when sea animal' do
let(:animal_type) { 'sea' }
it "should create a sea animal" do
....
end
end
context 'when land animal' do
let(:animal_type) { 'land' }
it "should create a land animal" do
....
end
end
end
推荐阅读
- c++ - 为什么 pubsetbuf(0, 0) 不使我的流无缓冲?
- python - Python 3 脚本或 gimp script-fu 重新排列彩色地图索引图像
- c# - EF Core - 同一实体的并发保存会创建多个
- java - 如何设置java框架的侧面区域无法?
- java - 我想从应用程序切换到 chrome 网络浏览器,然后导航回 appium 中的同一个应用程序
- php - 灵活地向基础对象添加新功能
- sql - 将 Postgres 自动增量值重置为 0
- heroku - 尝试将全栈应用程序部署到 Heroku,得到错误的响应数据
- javascript - 为什么 Javascript Async 在 Chrome 扩展程序中不能并行工作
- javascript - Angular Google Chart - 错误错误:无效行 #0 尝试将数据与 MongoDB 数据数组绑定时