gpt4 book ai didi

ruby-on-rails - Rspec/ capybara : Testing if a controller method is called

转载 作者:行者123 更新时间:2023-12-03 18:10:47 24 4
gpt4 key购买 nike

鉴于我设置了一个带有索引操作的 HomeController

class HomeController < ApplicationController
def index
@users = User.all
end
end

并通过根路径路由到它,
  root :to => "home#index"

为什么这个请求规范失败
it 'should called the home#index action' do
HomeController.should_receive(:index)
visit root_path
end

带有以下消息
 Failure/Error: HomeController.should_receive(:index)
(<HomeController (class)>).index(any args)
expected: 1 time
received: 0 times

?是不是因为 index 方法被称为实例方法而不是类方法?

最佳答案

我不确定您到底要测试什么,而且我认为对于可以在何处使用哪些方法存在一些混淆,因此我将尝试给出 Routing specs 的示例。 , Request Specs , Controller specs , 和 Feature specs ,希望其中之一适合您。

路由

如果你想确保你的根路径被路由到 home#index行动,路由规范可能是合适的:

规范/路由/routing_spec.rb

describe "Routing" do
it "routes / to home#index" do
expect(get("/")).to route_to("home#index")
end
end

要求

如果您想确保 index模板在对您的根路径的请求时呈现,请求规范可能是合适的:

规范/请求/home_requests_spec.rb
describe "Home requests" do
it 'successfully renders the index template on GET /' do
get "/"
expect(response).to be_successful
expect(response).to render_template(:index)
end
end

Controller

如果您想确保 index模板在对 index 的请求时呈现您的行动 HomeController , Controller 规范可能是合适的(在这种情况下与请求规范非常相似,但只关注 Controller ):

规范/ Controller /home_controller_spec.rb
describe HomeController do
describe "GET index" do
it "successfully renders the index template" do
expect(controller).to receive(:index) # this line probably of dubious value
get :index
expect(response).to be_successful
expect(response).to render_template(:index)
end
end
end

特征

如果您想确保 home#index 呈现的页面有一些特定的内容,特性规范可能是合适的(也是唯一可以使用 Capybara methods 的地方,比如 visit ,取决于你的 Rails/RSpec 版本):

规范/功能/home_features_spec.rb
feature "Index page" do
scenario "viewing the index page" do
visit root_path
expect(page).to have_text("Welcome to my awesome index page!")
end
end

关于ruby-on-rails - Rspec/ capybara : Testing if a controller method is called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17004723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com