在rspec中没有视图的情况下测试控制器,可以通过以下步骤进行:
controllers
目录下的对应控制器文件名加上_spec.rb
后缀,例如users_controller_spec.rb
。describe
方法定义一个测试组,描述要测试的控制器行为。然后,使用before
方法设置测试环境,例如创建必要的模拟数据或设置请求参数。接下来,使用it
方法定义具体的测试用例,描述控制器的一个行为。在测试用例中,可以使用get
、post
、put
、delete
等方法模拟请求,并断言控制器的行为是否符合预期。rspec spec/controllers/users_controller_spec.rb
命令运行users_controller_spec.rb
文件中的测试。以下是一个示例的控制器测试代码:
RSpec.describe UsersController, type: :controller do
describe "GET index" do
before do
get :index
end
it "returns a successful response" do
expect(response).to be_successful
end
it "assigns @users" do
expect(assigns(:users)).not_to be_nil
end
end
describe "POST create" do
let(:user_params) { { name: "John Doe", email: "john@example.com" } }
it "creates a new user" do
expect {
post :create, params: { user: user_params }
}.to change(User, :count).by(1)
end
it "redirects to the created user" do
post :create, params: { user: user_params }
expect(response).to redirect_to(User.last)
end
end
end
在上述示例中,我们测试了UsersController
的index
和create
动作。在before
块中,使用get
方法模拟了index
动作的请求,并在测试用例中断言了响应是否成功以及是否正确分配了@users
实例变量。在create
动作的测试用例中,使用post
方法模拟了create
动作的请求,并断言了创建用户后数据库中用户数量的变化以及响应是否正确重定向到了新创建的用户页面。
需要注意的是,由于没有视图参与,控制器测试主要关注控制器的行为和响应,而不涉及视图的渲染和展示。
领取专属 10元无门槛券
手把手带您无忧上云