gpt4 book ai didi

ruby-on-rails - 将命名路由传递给 RSpec 中的 Controller 宏

转载 作者:行者123 更新时间:2023-12-01 01:12:48 24 4
gpt4 key购买 nike

我正在尝试通过为常用测试添加一些 Controller 宏来完善我的 RSpec 示例。在这个稍微简化的示例中,我创建了一个宏,它只是测试获取页面是否会导致直接到另一个页面:

def it_should_redirect(method, path)
it "#{method} should redirect to #{path}" do
get method
response.should redirect_to(path)
end
end

我试图这样称呼它:
context "new user" do
it_should_redirect 'cancel', account_path
end

当我运行测试时,我收到一条错误消息,指出它无法识别 account_path:

undefined local variable or method `account_path' for ... (NameError)



我尝试按照 this SO thread on named routes in RSpec 中给出的指导包含 Rails.application.routes.url_helpers但仍然收到相同的错误。

如何将命名路由作为参数传递给 Controller ​​宏?

最佳答案

包含在 config.include Rails.application.routes.url_helpers 中的 url 助手仅在示例中有效(使用 itspecify 设置的块)。在示例组(上下文或描述)中,您不能使用它。尝试使用符号和 send相反,像

# macro should be defined as class method, use def self.method instead of def method
def self.it_should_redirect(method, path)
it "#{method} should redirect to #{path}" do
get method
response.should redirect_to(send(path))
end
end

context "new user" do
it_should_redirect 'cancel', :account_path
end

不要忘记在配置中包含 url_helpers。

或者在例子中调用宏:
def should_redirect(method, path)
get method
response.should redirect_to(path)
end

it { should_redirect 'cancel', account_path }

关于ruby-on-rails - 将命名路由传递给 RSpec 中的 Controller 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14305293/

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