Guard-RSpec在README中提到可以通过指定cusom cmd
来使用spring运行规范:
guard :rspec, cmd: 'spring rspec' do
# ...
end
过去工作正常,直到我执行spring binstub --all
改变了我的bin/spring
...
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'spring' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
Pathname.new(__FILE__).realpath)
require 'rubygems'
require 'bundler/setup'
load Gem.bin_path('spring', 'spring')
...到...
#!/usr/bin/env ruby
# This file loads spring without using Bundler, in order to be fast
# It gets overwritten when you run the `spring binstub` command
unless defined?(Spring)
require "rubygems"
require "bundler"
if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ spring \((.*?)\)$.*?^$/m)
ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
ENV["GEM_HOME"] = ""
Gem.paths = ENV
gem "spring", match[1]
require "spring/binstub"
end
end
现在,在运行guard
并点击输入时,它只是告诉我:
[2] guard(main)> <<<<< pressing enter
14:35:35 - INFO - Run all
14:35:35 - INFO - Running all specs
并发出类似&#34; RSpec结果的通知 - 失败&#34;出现。
更改我的Guardfile
并从RSpec spring
删除cmd
时,这样......
guard :rspec, cmd: 'rspec' do
......规格再次运行,但显然没有使用弹簧?
我还必须提到,当从OSX终端运行spring
时,似乎没有任何事情发生:
$ spring
$
那么:我如何配置Guard和RSpec来使用Spring?
更新
目前,我已将bin/spring
可执行文件还原为&#34; binstubbing&#34;之前的版本。它:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'spring' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
Pathname.new(__FILE__).realpath)
require 'rubygems'
require 'bundler/setup'
load Gem.bin_path('spring', 'spring')
Guardfile看起来像这样:
guard :rspec, cmd: 'spring rspec' do ... end
这很有效,但我认为它比运行裸rspec
更快。
所以我现在绝对不确定如何使用Spring正确运行RSpec - 使用spring rspec
或rspec
?
答案 0 :(得分:4)
我之前正在研究这个问题。
Binstubs是围绕可执行文件的包装脚本。他们住在Rails 在bin /中。如果你运行spring binstub --all,那么你的binstub将会是 使用Spring。
鉴于这一事实,你应该可以做这样的事情来使用Rspec with Spring
guard :rspec, cmd: "bin/rspec" do
验证一点点测试。确保你已经有了binstubbed rspec。
bundle binstubs 'rspec-core'
验证Spring是否未在bin / rspec中引导。不应出现以下块。
[二进制/ rspec的]
begin
load File.expand_path("../spring", __FILE__)
rescue LoadError
end
关闭Spring。运行bin / rspec并验证Spring是否未被触发。
spring stop
spring status
bin/rspec
spring status
如果没有触发Spring,你应该看到这个
Spring is not running.
现在使用Spring引导你的binstubs。确保您已经安装了必要的宝石。
[Gemfile中]
group :development, :test do
gem "rspec-rails", "~> 3.0"
gem 'spring-commands-rspec'
...
end
[终端]
bundle install
更新binstubs以使用Spring
spring binstub --all
验证Spring是否已在bin / rspec中引导。现在应该出现以下块。
[二进制/ rspec的]
begin
load File.expand_path("../spring", __FILE__)
rescue LoadError
end
关闭Spring。运行bin / rspec并验证是否已触发Spring。
spring stop
spring status
bin/rspec
spring status
现在检查弹簧加载测试环境后测试是否运行得更快。
spring stop
time bin/rspec
[输出]
real 0m4.981s
user 0m0.144s
sys 0m0.032s
Spring现在应该运行了。让我们看看它是否正在发挥作用。
time bin/rspec
[输出]
real 0m0.831s
user 0m0.140s
sys 0m0.034s
是的。
最重要的是,如果您的binstubs已经使用Spring引导,则调用binstub将包含Spring。当然,只有已经在Spring中注册的命令才能使用Spring,这就是为什么spring-commands-rspec早先包含在Gemfile中以支持Rspec的原因。