标签: spork

NameError:使用RSpec和Spork进行测试时Rails应用程序中的未初始化常量

我试图在终端中使用以下命令在我的第一个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-on-rails spork rspec2

3
推荐指数
1
解决办法
8044
查看次数

Rails未初始化的常量RelationshipController(NameError)

我正在关注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)

rspec ruby-on-rails spork

3
推荐指数
1
解决办法
4565
查看次数

使用Guard和Spork重新加载RSpec共享示例

当我对它们进行更改时,如何让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)

我宁愿让它重新加载已改变的共享示例,因此我可以有一个更快的反馈循环.

ruby rspec ruby-on-rails guard spork

3
推荐指数
1
解决办法
672
查看次数

Rspec极其缓慢

我的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

3
推荐指数
1
解决办法
4717
查看次数

如果我使用Guard和Spork,如何在规范或功能中进行ruby-debug?

我设法让Cucumber,RSpec,Guard和Spork在Rails 3应用程序中相互配合,但现在我遇到了上述问题.

目前我require 'spork/ext/ruby-debug'在prefork区块,spec_helper.rb但这只有在我手动运行spork,没有后卫时才有效.

rspec ruby-on-rails guard cucumber spork

2
推荐指数
1
解决办法
1000
查看次数

使用Virtual Box在Linux上运行Spork for rails - 使用中的端口错误

在Ubuntu 11.0.4和Fedora上:我在使用spork时遇到"已经在使用地址 - bind(2)(Errno :: EADDRINUSE)"错误.

如果我使用不同的端口加载spork,则rspec不再检测到drb服务器 - guard也不能使用它.我尝试过安装不同的操作系统,以及使用VMWare,我也遇到了同样的错误.

我该怎么办?

谢谢!

ubuntu rspec spork ruby-on-rails-3

2
推荐指数
1
解决办法
1107
查看次数

在 Rails 3.1 项目中使用 RSpec 时出现“未初始化的常量”错误

我正在尝试使用 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 无关。我肯定错过了什么。

rspec spork rspec2 ruby-on-rails-3 ruby-on-rails-3.1

2
推荐指数
1
解决办法
3519
查看次数

Spork/Autotest不会自动获取更改

我正在按照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)

ruby-on-rails autotest spork ruby-on-rails-3

2
推荐指数
1
解决办法
2167
查看次数

ZenTest 4.9.3显示为无效的gemspec

尝试运行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

2
推荐指数
1
解决办法
2889
查看次数

我无法引导Spork配置

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但我收到相同的错误消息.

我该怎么办?

ruby testing install ruby-on-rails spork

1
推荐指数
1
解决办法
611
查看次数

Guard启动控制台,使用Time - INFO显示注释.怎么会?

我今天根据Michael Hartl的Rails教程(http://youtu.be/FZ-b9oZpCZYhttp://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)

ruby-on-rails guard spork

1
推荐指数
1
解决办法
1753
查看次数

警卫RSpec在第一次失败后没有停止

嘿,我似乎无法在第一次测试失败后停止运行我的所有测试.我在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 ruby-on-rails guard spork

1
推荐指数
1
解决办法
887
查看次数

Guard:如何从 Guard 的控制台运行特定标签?

我在我的 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有效……但这比切换到另一个外壳要冗长一些。似乎这是一个相当普遍的要求。想法?

rspec ruby-on-rails guard spork

1
推荐指数
1
解决办法
1231
查看次数