4

我正在设置一个基本模板,用于在 rails 应用程序中进行 capybara 功能测试。我也在使用 MiniTest 而不是 RSPEC。

运行 Rake Test 似乎没有接受我的功能测试。我在文件中有一个测试,运行 rake test 不会改变断言的数量。当我运行 rake 测试时,也不会出现跳过测试。

这是存储库的链接:https ://github.com/rrgayhart/rails_template

这是我遵循的步骤

  1. 我将此添加到 Gemfile 并运行 bundle

    group :development, :test do
      gem 'capybara'
      gem 'capybara_minitest_spec'
      gem 'launchy'
    end
    
  2. 我将此添加到 test_helper

    require 'capybara/rails'
    
  3. 我创建了一个文件夹 test/features

  4. 我创建了一个名为drink_creation_test.rb 的文件

  5. 这是该功能测试文件中的代码

    require 'test_helper'
    
    class DrinkCreationTest < MiniTest::Unit::TestCase
    
      def test_it_creates_an_drink_with_a_title_and_body
          visit drinks_path
          click_on 'new-drink'
          fill_in 'name', :with => "PBR"
          fill_in 'description', :with => "This is a great beer."
          fill_in 'price', :with => 7.99
          fill_in 'category_id', :with => 1
          click_on 'save-drink'
          within('#title') do
            assert page.has_content?("PBR")
          end
          within('#description') do
            assert page.has_content?("td", text: "This is a great beer")
          end
      end
    
    end
    

我认为我遇到了无法正确连接某些东西的问题。请让我知道我是否可以提供任何其他有助于诊断此问题的信息。

4

2 回答 2

5

这里发生了很多事情。首先,默认rake test任务不会选择不在默认测试目录中的测试。因此,您需要移动测试文件或添加新的 rake 任务来测试test/features.

由于您使用的是capybara_minitest_spec ,因此您需要将其包含Capybara::DSLCapybara::RSpecMatchers您的测试中。并且由于您在此测试中没有使用ActiveSupport::TestCase或其他 Rails 测试类之一,您可能会在数据库中看到不一致的情况,因为此测试是在标准 Rails 测试事务之外执行的。

require 'test_helper'

class DrinkCreationTest < MiniTest::Unit::TestCase
  include Capybara::DSL
  include Capybara::RSpecMatchers

  def test_it_creates_an_drink_with_a_title_and_body
      visit drinks_path
      click_on 'new-drink'
      fill_in 'name', :with => "PBR"
      fill_in 'description', :with => "This is a great beer."
      fill_in 'price', :with => 7.99
      fill_in 'category_id', :with => 1
      click_on 'save-drink'
      within('#title') do
        assert page.has_content?("PBR")
      end
      within('#description') do
        assert page.has_content?("td", text: "This is a great beer")
      end
  end

end

或者,您可以使用minitest-railsminitest-rails-capybara来生成运行这些测试。

$ rails generate mini_test:feature DrinkCreation
$ rake minitest:features
于 2013-11-07T17:00:22.477 回答
2

我相信 minitest 在使用 capybara 时有它自己的导轨宝石:minitest-rails-capybara

按照那里的说明可能会有所帮助,但我以前从未设置过水豚迷你测试。

于 2013-11-05T22:51:39.737 回答