【发布时间】:2015-08-28 22:06:28
【问题描述】:
我在 Rails 中有一个非常简单的用例——点击端点 /users/show/:id 会将该用户的状态更新为 'accepted' 并向他们展示他们的应用程序。
控制器规范
class UsersController < ApplicationController
def show
User.find(params[:id]).update_all(status: 'pending')
@some_variable = 'blahblah'
end
end
测试
require "spec_helper"
RSpec.describe UsersController do
describe "GET show" do
it "should set user to accepted status" do
get :show, { id: 1, foo: 'bar' }
expect(User.find(1).status).to eq('accepted')
end
end
end
问题
以上对我来说失败了,这告诉我更新状态的控制器代码从未真正运行过。
get() 是否真的点击了路由并运行控制器操作,还是只是发出模拟请求?我尝试在控制器中放入一些puts 语句,但没有看到它们的输出,这让我进一步相信控制器逻辑永远不会被调用。
如果是后者,我怎样才能真正调用我的控制器动作?
谢谢!
【问题讨论】:
-
测试失败仅仅是因为用户的状态不被接受,还是某处出现错误?
-
我编辑了我的帖子,但感觉控制器动作本身永远不会被调用。在控制器中添加一些
puts语句,甚至是binding.pry似乎都不起作用,因为这些语句永远不会执行。 -
update_all(status: 'pending'),如果我是对的,您是否将状态更新为“待处理”?
标签: ruby-on-rails rspec controller request