【问题标题】:Is there an easy way to include RackTest methods in Capybara tests?有没有一种简单的方法可以在 Capybara 测试中包含 RackTest 方法?
【发布时间】:2013-04-12 18:41:50
【问题描述】:

Capybara 2 删除了这些并建议将它们分开,但我们在某些情况下希望在测试中同时使用这两者(通过视图启用 api 键,然后点击 api 等)。

我尝试包含include ::Rack::Test::Methods,但我得到了:

undefined local variable or method `app' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fb737932ba0>

【问题讨论】:

    标签: rspec capybara rack-test


    【解决方案1】:

    我在使用 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
    

    【讨论】:

      【解决方案2】:

      试试这个

      def app
        Rails.application
      end
      

      【讨论】:

        【解决方案3】:

        对于其他任何遇到“NameError: undefined local variable or method `app'”错误的人。当您一次运行所有测试(多个文件)并且其中一个执行include Rack::Test::Methods 时,也会发生这种情况 - 包含“感染”其他测试。所以症状是当文件单独运行时所有测试都通过了,但是当它们一起运行时它们会失败并出现“无应用程序”错误。至少 rails 3.0.9rspec 3.0 会发生这种情况

        解决此问题的方法是删除includes。或者,您可以尝试类似@ultrasaurus 的答案,以确保仅将包含正确包含在需要它的示例中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多