我正在尝试加载控制台以与我的一些rspec模拟助手进行交互.我期望运行script/console test会加载类似于我运行时的env spec.但是,情况似乎并非如此.看起来好像spec_helper永远不会加载.或者,如果是,它实际上并没有贯穿逻辑,因为spork已经污染了它.
简而言之,是否有一种快速简便的方式来进行交互式的rspec派对?
如果我在rails项目中,使用rails.vim进行编辑,我该如何获得:通过Spork运行规范?
它主要只是一个问题:通过"-o"标志Rake知道项目的specs/spec.opts文件?
如果我在我的rails项目中使用spork并且有这样的spec_helper.rb文件
require 'spork'
Spork.prefork do
...
end
Spork.each_run do
...
end
Run Code Online (Sandbox Code Playgroud)
这是否意味着我需要在运行我的规格时总是运行spork rspec spec?意思是,如果我还没有$ spork在终端窗口中执行,是否意味着我的规格将无法正常运行?
我正在使用spork来测试Sinatra应用程序,使用Ruby 1.9.2,测试运行时间约为3.5秒,但在Ruby 1.8.7中,它们平均为1.2秒.我确实尝试过Ruby 1.9.3甚至是JRuby,但他们使用的宝石有一些错误.有没有办法将Ruby 1.9.2的rspec性能提升到1.8.7的水平?
我的Gemfile:
source :rubygems
gem 'sinatra', '1.3.1'
gem 'thin', '1.3.1'
gem 'haml', '3.1.4'
gem 'datamapper', '1.2.0'
gem 'dm-postgres-adapter', '1.2.0'
gem 'carrierwave', '0.5.8'
gem 'carrierwave-datamapper', '0.2.0'
group :test do
gem "dm-sqlite-adapter"
gem "spork"
gem "rspec"
gem "rack-test"
end
Run Code Online (Sandbox Code Playgroud)
spec_helper.rb:
require 'rubygems'
require 'spork'
require 'sinatra'
require 'rack/test'
require 'rspec'
require File.join(File.dirname(__FILE__), '..', 'app.rb')
require File.join(File.dirname(__FILE__), '..', 'model/model.rb')
Spork.prefork do
set :environment, :test
set :files, "test_files"
end
Spork.each_run do
RSpec.configure do |config|
config.before(:each) { DataMapper.auto_migrate! } …Run Code Online (Sandbox Code Playgroud) 我正在运行spork和后卫,我的RSpec测试都运行正常.为了加快测试速度,我可以使用放在.rspec文件中的标签成功过滤我的RSpec测试.
.rspec
--colour
--debug
--tag focus
--tag now
Run Code Online (Sandbox Code Playgroud)
不幸的是,虽然我无法过滤黄瓜标签.黄瓜每次运行时都会运行所有内容或只运行更改的文件.
我怎样才能让黄瓜/ spork/guard尊重像@ wip,@ no等标签并只运行那些测试?有没有相当于.rspec黄瓜标签的文件?
假设有以下课程
# derp.rb
class Derp < Struct.new :id
end
Run Code Online (Sandbox Code Playgroud)
当我load "./derp.rb"两次程序失败时TypeError: superclass mismatch for class Derp.好的,这可以用require.来管理.但是如何使用Spork为每次测试重新加载这些类?require显然不会工作因为它缓存加载的文件.
在我的Gemfile中......
group :development, :test do
gem 'capybara', "1.1.2"
gem 'database_cleaner', "0.7.0"
gem 'cucumber', "1.1.2"
gem 'cucumber-rails', "1.2.0"
gem 'rspec-rails', "2.7.0"
gem 'spork', "0.9.0.rc9"
gem 'launchy' #launches the page
gem 'guard-spork', "0.3.1"
gem 'guard-rspec', "0.5.4"
gem 'guard-cucumber', "0.7.4"
gem 'factory_girl_rails'
end
Run Code Online (Sandbox Code Playgroud)
我的Guardfile有两组(:specs和:features).
group :specs do
guard :spork, :rspec_env => { 'RAILS_ENV' => 'test' } do
watch('config/application.rb')
watch('config/environment.rb')
watch(%r{^config/environments/.+\.rb$})
watch(%r{^config/initializers/.+\.rb$})
watch('spec/spec_helper.rb')
end
guard :rspec, :version => 2 do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
# # Rails example …Run Code Online (Sandbox Code Playgroud) 我有一个rspec规范:
require "spec_helper"
describe ApplicationHelper do
describe "#link_to_cart" do
it 'should be a link to the cart' do
helper.link_to_cart.should match /.*href="\/cart".*/
end
end
end
Run Code Online (Sandbox Code Playgroud)
和ApplicationHelper:
module ApplicationHelper
def link_to_cart
link_to "Cart", cart_path
end
end
Run Code Online (Sandbox Code Playgroud)
这在访问站点时有效,但规范失败,并显示有关路由的RuntimeError不可用:
RuntimeError:
In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers
Run Code Online (Sandbox Code Playgroud)
因此,我Rails.application.routes.url在我的规范中包含了spec_helper-file,甚至包括ApplicationHelper它本身,都无济于事.
编辑:我正在通过spork运行测试,也许这与它有关并导致问题.
在使用Spork运行时,如何包含这些路线助手?
我有一个标准的Rails 3.2应用程序,有一些奇怪的行为正在进行.
我可以在rspec spec/没有spork运行的情况下运行,所有测试都没有问题.
然后我点起spork并再次运行规格.这一次,每次接触我的邮件的测试都会失败并出现同样的错误:
Failures:
1) InvitationsController GET accept with non-matching token should redirect to the root path
Failure/Error: let!(:invitation) { Factory :invitation }
NoMethodError:
undefined method `invite' for InvitationMailer:Class
# ./app/models/invitation.rb:29:in `send_email'
# ./spec/controllers/invitations_controller_spec.rb:5:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
然后,只是为了让它变得有点奇怪,我可以运行单独的目录或规格,无论是否运行spork,一切都没有问题.例如rspec spec/mailers或rspec spec/models.
这是我被告知未定义的方法:
class InvitationMailer < ActionMailer::Base
default from: APP_CONFIG[:default_from]
def invite(invitation)
@invitation = invitation
mail(to: @invitation.recipient_email, subject: "the subject")
end
end
Run Code Online (Sandbox Code Playgroud)
有什么想法会发生什么?
我在迈克尔·哈特尔的Rails Tutorial之后用Spork运行了Guard,我遇到了这个问题.以下是错误消息:
20:45:58 - INFO - Starting Spork for RSpec, Test::Unit
20:45:58 - ERROR - Guard::Spork failed to achieve its <start>, exception was:
> [#B57790298EE3] ChildProcess::LaunchError: No such file or directory - bundle exec spork -p 8989
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/childprocess-0.3.9/lib/childprocess/unix/fork_exec_process.rb:54:in `l\aunch_process'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/childprocess-0.3.9/lib/childprocess/abstract_process.rb:72:in `start'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-spork-1.2.0/lib/guard/spork/spork_instance.rb:38:in `start'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-spork-1.2.0/lib/guard/spork/runner.rb:33:in `each'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-spork-1.2.0/lib/guard/spork/runner.rb:33:in `launch_sporks'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-spork-1.2.0/lib/guard/spork.rb:21:in `start'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-1.7.0/lib/guard/runner.rb:99:in `block in run_supervised_task'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-1.7.0/lib/guard/runner.rb:97:in `catch'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-1.7.0/lib/guard/runner.rb:97:in `run_supervised_task'
> [#B57790298EE3] /home/us/.rvm/gems/ruby-2.0.0-p0/gems/guard-1.7.0/lib/guard/runner.rb:54:in `block (2 …Run Code Online (Sandbox Code Playgroud)