ruby-on-rails - 控制器的未定义局部变量或方法“参数”
问题描述
我正在尝试使用 Rails 实现联系人管理器。我正在使用 RSpec 进行测试驱动开发。
“当我查看一个人的页面时,我点击一个添加链接,将我带到我输入电话号码的页面。我点击保存,然后我看到这个人及其更新的信息”
我正在尝试验证此操作。
在我的控制器类中
describe "POST #create" do
context "with valid params" do
let(:alice) { Person.create(first_name: 'Alice', last_name: 'Smith') }
let(:valid_attributes) { {number: '555-1234', person_id: alice.id} }
it "creates a new PhoneNumber" do
expect {
post :create, params: {phone_number: valid_attributes}, session: valid_session
}.to change(PhoneNumber, :count).by(1)
end
it "redirects to the phone number's person" do
post :create, params: {:phone_number => valid_attributes}, session: valid_session
@phone_number = PhoneNumber.new(person_id: params[:person_id])
expect(response).to redirect_to(@phone_number.person)
end
end
我想重定向到电话号码的人,但在获取电话号码时它给了我一个错误undefined local variable or method params' for #<RSpec::ExampleGroups::PhoneNumbersController::POSTCreate::WithValidParams:0x00007fc89e276898>
我也有如下视图测试
it 'adds a new phone number' do
page.click_link('Add phone number')
page.fill_in('Number', with: '555-8888')
page.click_button('Create Phone number')
expect(current_path).to eq(person_path(person))
expect(page).to have_content('555-8888')
end
现在这个测试也因为这个错误而失败:
expected: "/people/1"
got: "/phone_numbers"
如何解决这些问题并根据需要重定向用户?提前致谢
解决方案
params
在你的测试中没有这样的东西。
代替...
@phone_number = PhoneNumber.new(person_id: params[:person_id])
……你可以……
@phone_number = PhoneNumber.new(person_id: valid_attributes[:person_id])
但是由于您只是在测试您是否重定向到该人,您可以完全删除上述行并执行
expect(response).to redirect_to(alice)
推荐阅读
- php - 如何使用oracle数据库在php中获取特定行和列中的数据
- django - Docker 和 Django PermissionError:运行 collectstatic 时的 [Errno 13]
- android - 如何为android中的任何视图创建彩色阴影?
- vue.js - 来自 DjangoRest 后端的图像无法在 Vue3 前端正确显示
- sql - SQL 分组和求和以创建新行
- cmd - CMD 中驱动器插入的服务触发事件
- r - 使用 ROracle 包从 R 中的 Oracle 数据库中提取记录时的日期和时间问题
- java - Spring Data MongoRepository Streams 的内存使用情况
- android - 如何在它仍在运行时在反应本机中监听 shell 命令输出?
- java - 在java中经过一段时间后执行任务