Hartl Rails教程

时间:2014-10-24 15:58:46

标签: ruby-on-rails ruby rspec gemfile

我遇到了Michael Hartl" Rails Tutorial"的第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

我真的很感激任何帮助!感谢

3 个答案:

答案 0 :(得分:0)

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

而不是使用rspec,而是生成spec文件。因此,您有invoke rspecspec/models/user_spec.rb

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

答案 1 :(得分:0)

如果您想要相同的输出,请将相关的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 gems放入开发和测试组中。

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

答案 2 :(得分:0)

看起来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章,所以我和你在同一个位置。我通过电子邮件发送了作者,看看他是否愿意在某个地方提出旧版本。

迈克尔哈特尔回到我身边。这是旧版本的链接:

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