【问题标题】:Hartl Rails TutorialHartl Rails 教程
【发布时间】:2014-10-24 15:58:45
【问题描述】:

我在 Michael Hartl 的“Rails 教程”的第 6.2.1 节(有效性测试)中遇到了一些问题,并意识到我什至没有创建测试目录作为结果

$ rails generate model User name:string email:string

虽然教程说我应该看到输出

 invoke  active_record
  create    db/migrate/20140724010738_create_users.rb
  create    app/models/user.rb
  invoke    test_unit
  create      test/models/user_test.rb
  create      test/fixtures/users.yml

我实际看到的是:

   invoke  active_record
   identical    db/migrate/20141020202519_create_users.rb
   identical    app/models/user.rb
   invoke    rspec
   identical      spec/models/user_spec.rb

我研究了大量不同的站点来寻找答案,并注意到人们建议在 Gemfile 中移动 rspec-rails,但据我所知,我的放置正确。这是我的 Gemfile:

source 'https://rubygems.org'
ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0

gem 'rails', '4.0.8'
gem 'bootstrap-sass', '2.3.2.0'
gem 'sprockets', '2.11.0'

group :development, :test do
gem 'sqlite3', '1.3.8'
gem 'rspec-rails', '2.13.1'
gem 'guard-rspec', '2.5.0'
gem 'spork-rails', '4.0.0'
gem 'guard-spork', '1.5.0'
gem 'childprocess', '0.3.6'
end

group :test do
gem 'selenium-webdriver', '2.35.1'
gem 'capybara', '2.1.0'
end

gem 'sass-rails', '4.0.3'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
end

非常感谢任何帮助!谢谢

【问题讨论】:

  • 这只是因为您使用的是 rspec 而不是单元测试 - 这里不用担心,现在 rspec 更常用。
  • 从输出看,本教程使用 Test::Unit(可能使用 Minitest gem)作为测试框架,但您使用的是 RSpec。确保您使用的是正确的 gem,并且您的项目设置正确。
  • 欢迎来到 Stack Overflow。当你写一个问题时,请使用一个更具描述性的标题,一些适用于问题的标题,而不是你正在做的事情。此外,如果您将问题代码精简到复制问题所需的最低限度,这确实对我们有帮助。除此之外的任何事情都会浪费我们试图帮助您的时间,并且在其他人搜索相同问题的答案并找到您的问题时不必要地混淆问题。
  • 正如您所见,我一般是编程新手,所以我无法知道最低限度的必要条件是多少。抱歉,如果信息太多,但这是我能做的最好的了。

标签: ruby-on-rails ruby rspec gemfile


【解决方案1】:

这里发生的是 rspec-rails 覆盖了 rails 的默认行为。 默认情况下,Rails 附带 test_unit(如原始输出中的 invoke test_unit 所示)。

您可以生成规范文件,而不是使用 rspec。这样你就有了invoke rspecspec/models/user_spec.rb

如果您从 Gemfile 中删除 rspec-rails 并运行 bundle install,然后再次运行 rails g model User name:string email:string,它将根据教程生成测试文件。

【讨论】:

    【解决方案2】:

    如果您想要相同的输出,请将相关的rspec gem 仅放在测试组中。

    group :development, :test do
        gem 'sqlite3', '1.3.8'
        gem 'spork-rails', '4.0.0'
        gem 'guard-spork', '1.5.0'
        gem 'childprocess', '0.3.6'
    end
    
    group :test do
        gem 'selenium-webdriver', '2.35.1'
        gem 'capybara', '2.1.0'
        gem 'rspec-rails', '2.13.1'
        gem 'guard-rspec', '2.5.0'
    end
    

    还有更新:

    bundle update
    

    它对我来说适用于逆向过程(在生成模型时调用 rspec)将 rspec gem 放入开发和测试组。

    如果您不想使用 rspec 作为测试套件,只需从 gemfile 中删除 gem。

    【讨论】:

      【解决方案3】:

      看起来,Rails 教程的在线版本最近进行了大修。之前,教程使用 rspec 进行测试;现在它正在使用rails附带的测试框架。如果您查看第 3.1 节,示例应用程序的 Gemfile 现在如下所示:

      source 'https://rubygems.org'
      
      gem 'rails',                '4.2.0.beta2'
      gem 'sass-rails',           '5.0.0.beta1'
      gem 'uglifier',             '2.5.3'
      gem 'coffee-rails',         '4.0.1'
      gem 'jquery-rails',         '4.0.0.beta2'
      gem 'turbolinks',           '2.3.0'
      gem 'jbuilder',             '2.2.3'
      gem 'rails-html-sanitizer', '1.0.1'
      gem 'sdoc',                 '0.4.0', group: :doc
      
      group :development, :test do
        gem 'sqlite3',     '1.3.9'
        gem 'byebug',      '3.4.0'
        gem 'web-console', '2.0.0.beta3'
        gem 'spring',      '1.1.3'
      end
      
      group :test do
        gem 'minitest-reporters', '1.0.5'
        gem 'mini_backtrace',     '0.1.3'
        gem 'guard-minitest',     '2.3.1'
      end
      
      group :production do
        gem 'pg',             '0.17.1'
        gem 'rails_12factor', '0.0.2'
      end
      

      在第 3.3.1 节中,第一个测试如下所示:

      require 'test_helper'
      
      class StaticPagesControllerTest < ActionController::TestCase
      
        test "should get home" do
          get :home
          assert_response :success
        end
      
        test "should get help" do
          get :help
          assert_response :success
        end
      end
      

      由于教程现在使用不同的测试框架,您将不再获得与教程相同的输出。事实上,您将不再能够按照教程中的测试进行操作。不幸的是,我认为你将不得不重新开始。我在第7章,所以我和你处于同样的位置。我给作者发了电子邮件,看看他是否愿意把旧版本放在某个地方。

      Michael Hartl 回复了我。这是旧版本的链接:

      http://rails-4-0.railstutorial.org/book

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多