我试图在终端中使用以下命令在我的第一个Rails应用程序中运行我的测试:
rspec spec/
Run Code Online (Sandbox Code Playgroud)
但它只会导致以下错误:
Exception encountered: #<NameError: uninitialized constant PagesController>
backtrace:
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/rspec-core-2.3.0/lib/rspec/core/backward_compatibility.rb:20:in `const_missing'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/rspec-expectations-2.3.0/lib/rspec/expectations/backward_compatibility.rb:6:in `const_missing'
/Users/rich/dev/rails_projects/abunchofletters/spec/controllers/pages_controller_spec.rb:3:in `<top (required)>'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/rspec-core-2.3.0/lib/rspec/core/configuration.rb:388:in `block in load_spec_files'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/rspec-core-2.3.0/lib/rspec/core/configuration.rb:388:in `map'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/rspec-core-2.3.0/lib/rspec/core/configuration.rb:388:in `load_spec_files'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/rspec-core-2.3.0/lib/rspec/core/command_line.rb:18:in `run'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/rspec-core-2.3.0/lib/rspec/monkey/spork/test_framework/rspec.rb:4:in `run_tests'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/spork-0.9.0.rc2/lib/spork/run_strategy/forking.rb:13:in `block in run'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/spork-0.9.0.rc2/lib/spork/forker.rb:21:in `block in initialize'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/spork-0.9.0.rc2/lib/spork/forker.rb:18:in `fork'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/spork-0.9.0.rc2/lib/spork/forker.rb:18:in `initialize'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/spork-0.9.0.rc2/lib/spork/run_strategy/forking.rb:9:in `new'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/spork-0.9.0.rc2/lib/spork/run_strategy/forking.rb:9:in `run'
/Users/rich/.rvm/gems/ruby-1.9.2-p0@abunchofletters/gems/spork-0.9.0.rc2/lib/spork/server.rb:47:in `run'
/Users/rich/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/drb/drb.rb:1558:in `perform_without_block'
/Users/rich/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/drb/drb.rb:1518:in `perform'
/Users/rich/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/drb/drb.rb:1592:in `block (2 levels) in main_loop'
/Users/rich/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/drb/drb.rb:1588:in `loop'
Run Code Online (Sandbox Code Playgroud)
我可以在浏览器中成功运行该站点,并且"Spork准备就绪并且正在倾听",这让我觉得我正在运行的Gems,RSpec,Spork还是......有什么问题?而不是我作为PagesController和RSpec测试编写的测试是基于RailsTutorial.org的书.我很茫然.
这是我的Gemfile:
source 'http://rubygems.org'
gem 'rails', '3.0.3'
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'
gem 'gravatar_image_tag', '0.1.0'
gem "nokogiri", '1.4.4'
gem …Run Code Online (Sandbox Code Playgroud) 我正在关注ruby.railstutorial.org,稍加修改我的应用程序.我试图运行relations_controller_spec但我不断收到以下错误:
$ bundle exec rspec spec/controllers/relationships_controller_spec.rb
Exception encountered: #<NameError: uninitialized constant RelationshipsController>
backtrace:
/Users/JP2/Documents/Development/Ruby/rails_projects/iPray/spec/controllers/relationships_controller_spec.rb:3:in `<top (required)>'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:419:in `block in load_spec_files'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:419:in `map'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:419:in `load_spec_files'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:18:in `run'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.6.4/lib/rspec/monkey/spork/test_framework/rspec.rb:5:in `run_tests'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/spork-0.9.0.rc8/lib/spork/run_strategy/forking.rb:13:in `block in run'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/spork-0.9.0.rc8/lib/spork/forker.rb:21:in `block in initialize'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/spork-0.9.0.rc8/lib/spork/forker.rb:18:in `fork'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/spork-0.9.0.rc8/lib/spork/forker.rb:18:in `initialize'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/spork-0.9.0.rc8/lib/spork/run_strategy/forking.rb:9:in `new'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/spork-0.9.0.rc8/lib/spork/run_strategy/forking.rb:9:in `run'
/Users/JP2/.rvm/gems/ruby-1.9.2-p290/gems/spork-0.9.0.rc8/lib/spork/server.rb:48:in `run'
/Users/JP2/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1558:in `perform_without_block'
/Users/JP2/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1518:in `perform'
/Users/JP2/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1592:in `block (2 levels) in main_loop'
/Users/JP2/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1588:in `loop'
/Users/JP2/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/drb/drb.rb:1588:in `block in main_loop'
Run Code Online (Sandbox Code Playgroud)
我刚刚发现如果我在spork没有运行的情况下尝试测试,那么测试就会通过,但是如果spork正在运行,我会得到上面的错误.
这是我的spec_helper.rb文件:
require 'rubygems'
require 'spork'
Spork.prefork do
# Loading more in this block will cause your tests …Run Code Online (Sandbox Code Playgroud) 当我对它们进行更改时,如何让spork重新加载我的共享示例?我尝试了以下内容,但它没有重新加载它们:
Spork.each_run do
Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f}
end
Run Code Online (Sandbox Code Playgroud)
我知道我可以在我的Guardfile中添加一个观察程序,让它在共享示例更改时重新加载env,但我的应用程序很大,需要大约10-15秒才能重新加载整个环境:
watch(/^spec\/shared_examples\/.*\.rb$/)
Run Code Online (Sandbox Code Playgroud)
我宁愿让它重新加载已改变的共享示例,因此我可以有一个更快的反馈循环.
我的rspec测试似乎运行速度非常慢,即使有防护和spork.
Finished in 5.36 seconds
13 examples, 2 failures
Run Code Online (Sandbox Code Playgroud)
我知道我可以做几件事来优化我的测试并减少与数据库的交互,但我强烈怀疑spec_helper设置不正确.我在轨道3.2.11与mongoid.每次运行后数据库清理程序都会清理.
spec_helper.rb
require 'rubygems'
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
DatabaseCleaner[:mongoid].strategy = :truncation
RSpec.configure do |config|
config.infer_base_class_for_anonymous_controllers = false
config.order = "random"
config.filter_run focus: true
config.filter_run_excluding :remove => true
config.run_all_when_everything_filtered = true
config.include Mongoid::Matchers
config.include Capybara::DSL
ActiveSupport::Dependencies.clear
end
end
Spork.each_run do
Fabrication.clear_definitions
RSpec.configure do |config|
config.before(:each) do
DatabaseCleaner.clean
end
end
end
Run Code Online (Sandbox Code Playgroud)
更新:问题出在我的一个测试中.这需要3秒钟.请查看@Sam Peacey的答案,了解我用于获得以下结果的命令
Dynamic Model should …Run Code Online (Sandbox Code Playgroud) ruby-on-rails spork rspec-rails ruby-on-rails-3 database-cleaner
我设法让Cucumber,RSpec,Guard和Spork在Rails 3应用程序中相互配合,但现在我遇到了上述问题.
目前我require 'spork/ext/ruby-debug'在prefork区块,spec_helper.rb但这只有在我手动运行spork,没有后卫时才有效.
在Ubuntu 11.0.4和Fedora上:我在使用spork时遇到"已经在使用地址 - bind(2)(Errno :: EADDRINUSE)"错误.
如果我使用不同的端口加载spork,则rspec不再检测到drb服务器 - guard也不能使用它.我尝试过安装不同的操作系统,以及使用VMWare,我也遇到了同样的错误.
我该怎么办?
谢谢!
我正在尝试使用 RSpec 来测试 Rails 3.1rc4 项目。我想测试我的lib/目录中的代码。我越来越:
/home/julas/myapp/spec/lib/operation_spec.rb:3:in `<top (required)>': uninitialized constant MyApp (NameError)
Run Code Online (Sandbox Code Playgroud)
MyApp 是一个模块(命名空间),每当我尝试使用此命名空间中的某些内容时都会出现问题,例如当我尝试这样做时
describe MyApp::Something do
Run Code Online (Sandbox Code Playgroud)
在我的测试中。
之前的测试没有任何问题。我lib/通过添加config.autoload_paths += Dir["#{config.root}/lib/**/"]到application.rb.
我真的不知道是什么原因造成的。有人经历过类似的事情吗?
更新:它似乎与 Spork 无关。我肯定错过了什么。
我正在按照http://ruby.railstutorial.org/上的教程开始我的第一个rails应用程序.我完全按照教程中的说法设置了我的开发环境(我正在使用带有Lion的Macbook Pro),除了一次打嗝之外它没有任何问题.我首先编写失败的测试然后我对代码进行更改以便它们通过,我可以在浏览器中检查页面是否正常工作但由于某种原因,测试结果仍然是"红色".我有一个运行3个选项卡的终端,第一个选项卡,我有spork运行(bundle exec spork),第二个选项卡,我有rails服务器运行(rails s)和第三个选项卡,我进行所有命令行更改并运行测试(自动测试) || bundle exec rspec spec /).我必须重新启动spork,rails服务器,然后再次测试,看看它们是"绿色".
这是预期的行为吗?因为根据教程,大多数时候我应该能够看到它们变绿,而不必重新启动服务器/ spork.
编辑
这是我的spec_helper.rb文件的样子
require 'rubygems'
require 'spork'
Spork.prefork do
# Loading more in this block will cause your tests to run faster. However,
# if you change any configuration or code from libraries loaded here, you'll
# need to restart spork for it take effect.
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
# Requires supporting files with custom matchers and macros, etc,
# in ./support/ …Run Code Online (Sandbox Code Playgroud) 尝试运行ZenTest时,我不断收到此错误
Invalid gemspec in [/usr/local/rvm/gems/ruby-1.9.3-p194/specifications/ZenTest-4.9.3.gemspec]: Illformed requirement ["< 2.1, >= 1.8"].
Run Code Online (Sandbox Code Playgroud)
我已经尝试删除ZenTest 4.9.3和gem安装ZenTest 4.8.3,但该版本无法在任何存储库中找到,因此它会自动安装ZenTest 4.9.3,这会导致错误,因此我无法运行spork或autotest.有没有办法解决?谢谢!
这是我的gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.11'
gem 'spork'
gem 'rspec-core'
gem 'autotest', '4.4.6'
gem 'autotest-rails', '4.1.2'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
group :development, :test do
gem 'sqlite3'
gem 'rspec-rails'
gem 'webrat'
gem 'capybara'
gem 'Zentest', '4.8.3'
end
group :production do
gem 'pg'
end
# Gems used only for assets and not required
# in production environments by default.
group …Run Code Online (Sandbox Code Playgroud) ruby-on-rails zentest spork railstutorial.org ruby-on-rails-3.2
我spork --bootstrap在命令行上运行,我得到了错误-bash: spork: command not found
我知道我安装了spork因为当我跑步时bundle show spork我得到了/Library/Ruby/Gems/1.8/gems/spork-0.9.0.rc3
我甚至尝试将目录更改为Spork所在的位置并运行spork --bootstrap但我收到相同的错误消息.
我该怎么办?
我今天根据Michael Hartl的Rails教程(http://youtu.be/FZ-b9oZpCZY和http://ruby.railstutorial.org/chapters/static-pages#sec-advanced_setup)中的高级设置设置了一个新的Rails应用程序.).我以前做过这个,但是,特别是Guard的输出是非常不同的.
首先,在此之前,Guard将运行并坐在那里听取更改,在新项目中,Guard运行控制台.当有变化时,它仍然坐在那里运行测试,但我想知道是否有人知道为什么会这样,特别是据我所知,我已经将这个项目设置为与我的其他项目完全相同(Gemfiles正是如此)相同).
其次,所有输出消息都带有时间戳和INFO在它们之前.再次,有谁知道这是为什么?
只是为了说明,这是旧项目的输出:
$ guard
Guard uses Growl to send notifications.
Guard is now watching at '/Users/billmurray/rails_projects/sample_app'
Starting Spork for RSpec
Using RSpec
Preloading Rails environment
Loading Spork.prefork block...
Spork is ready and listening on 8989!
Spork server for RSpec successfully started
Guard::RSpec is running, with RSpec 2!
Running all specs
Running tests with args ["--color", "--failure-exit-code", "2", "--format", "progress", "--format", "Guard::RSpec::Formatter::NotificationRSpec", "--out", "/dev/null", "--require", "/Users/billmurray/.rvm/gems/ruby-1.9.3-p194@rails3tutorial/gems/guard-rspec-1.2.1/lib/guard/rspec/formatters/notification_rspec.rb", "spec"]...
.........
Finished in 0.66338 seconds
9 examples, …Run Code Online (Sandbox Code Playgroud) 嘿,我似乎无法在第一次测试失败后停止运行我的所有测试.我在StackOverflow上的其他地方已经看到过这个问题,这里有人说他们做了同样的事情,类似案例仍然有问题.希望有人可以为我清除这一点.我的Guardfile如下:
require 'active_support/inflector'
guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do
watch('config/application.rb')
watch('config/environment.rb')
watch('config/environments/test.rb')
watch(%r{^config/initializers/.+\.rb$})
watch('Gemfile')
watch('Gemfile.lock')
watch('spec/spec_helper.rb') { :rspec }
watch('test/test_helper.rb') { :test_unit }
watch(%r{features/support/}) { :cucumber }
end
guard 'rspec', all_on_start: false, after_all_pass: false, cli: '--fail-fast --drb' do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
#Custom Rails Tutorial specs
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m|
["spec/routing/#{m[1]}_routing_spec.rb",
"spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb",
"spec/acceptance/#{m[1]}_spec.rb",
(m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" :
"spec/requests/#{m[1].singularize}_pages_spec.rb")]
end
watch(%r{^app/views/(.+)/}) do |m| …Run Code Online (Sandbox Code Playgroud) 我在我的 RSpec 测试套件中使用了 Spork 和 Guard。我从运行中排除慢测试:
RSpec.configure do |config|
...
config.filter_run_excluding slow: true
...
end
Run Code Online (Sandbox Code Playgroud)
然后当我需要在单独的 shell 中运行慢速测试时: rspec . --tag slow
我想知道是否有一个快捷方式可以在Guard 自动运行其测试的同一个shell 中运行慢标签?
有控制台>提示吗?在查看文档后,我发现键入 >. rspec . --tag slow有效……但这比切换到另一个外壳要冗长一些。似乎这是一个相当普遍的要求。想法?