Capybara 2 删除了这些并建议将它们分开,但在某些情况下,我们希望在测试中同时使用两者(通过视图启用 api 键,然后点击 api 等)。
我尝试包括include ::Rack::Test::Methods
但我得到:
undefined local variable or method `app' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fb737932ba0>
我在使用 Rails 和 RSpec 测试 API 时遇到了同样的错误。我为 Rails 2.3 找到了一篇有用的博客文章:http: //eddorre.com/posts/using-rack-test-and-rspec-to-test-a-restful-api-in-rails-23x
module ApiHelper
require 'rack/test'
include Rack::Test::Methods
def app
ActionController::Dispatcher.new
end
end
我对 Rails 3.2 的解决方案是(在 config.ru 中查找 MyAppName):
module ApiHelper
require 'rack/test'
include Rack::Test::Methods
def app
MyAppName::Application
end
end
尝试这个
def app
Rails.application
end
对于其他任何人都将头撞到墙上,得到“NameError:未定义的局部变量或方法‘app’”错误。当您一次运行所有测试(多个文件)并且其中一个执行include Rack::Test::Methods
- 包含“感染”其他测试时,也会发生这种情况。所以症状是当文件单独运行时所有测试都通过了,但是当它们一起运行时它们会失败并出现“无应用程序”错误。至少这发生在rails 3.0.9
和rspec 3.0
此问题的解决方案是删除includes
. 或者,您可以尝试类似@ultrasaurus 的答案,以确保仅将包含正确包含在需要它的示例中。