gpt4 book ai didi

ruby-on-rails - 使用带有 Rspec 的 request-url 的测试 Controller 方法

转载 作者:行者123 更新时间:2023-11-28 20:55:50 24 4
gpt4 key购买 nike

我为 Rails 编写了一个扩展 ApplicationController 的 gem用一定的方法。此方法解析当前 URL 并使用结果进行查找。它看起来像这样(简化):

@current_account = Account.where(subdomain => request.subdomains.first).first

我想在 gem 中包含一个测试,断言子域是根据给定的 URL 正确查找的。

我在尝试编写测试时遇到了两个问题:

1) 由于我在 gem 中进行测试,因此没有 Controller (或 Rails 应用程序),所以我实际上不知道从哪里开始(单元测试、 Controller 测试?)

2) 我到处搜索,但找不到设置 request 的方法Rspec 中的哈希用于测试。我希望我能够做类似 request.url = 'account1.example.com' 的事情

非常感谢任何有关如何在 Rspec 上为这种情况设置适当测试的帮助

最佳答案

如果您正在进行 Controller 测试,那么 URL 通常在配置中指定,例如:

config.action_controller.default_url_options = { host: 'www.test.host' }

也就是说,如果您将其作为 Rails 应用程序进行测试。

要测试抽象类中的方法是否有效,最好的选择是创建一个测试子类,并使用它进行测试。有点像

class TestController < ApplicationController; end

然后围绕这个 Controller 制定规范,它的行为应该与 ApplicationController

完全一样

编辑

这将是我所提议的示例:

class TestController < ApplicationController
def index
render text: 'fake page' #This is so the action does not fail
end

end

describe TestController do
it 'searches for the current account in the right subdomain' do
Account.should_receive(:where).with({subdomain: 'www'})

get :index
end
end

关于ruby-on-rails - 使用带有 Rspec 的 request-url 的测试 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20918820/

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