我遇到了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
我真的很感激任何帮助!感谢
答案 0 :(得分:0)
这里发生的是rspec-rails覆盖了rails的默认行为。
默认情况下,Rails附带test_unit
(如原始输出中的invoke test_unit
所示)。
而不是使用rspec,而是生成spec文件。因此,您有invoke rspec
和spec/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章,所以我和你在同一个位置。我通过电子邮件发送了作者,看看他是否愿意在某个地方提出旧版本。
迈克尔哈特尔回到我身边。这是旧版本的链接: