我正在努力成为一个更好的测试员。设置有这么多问题,我想知道它是否值得。

有人可以帮忙吗?

我正在 Windows 盒子上运行 Rails 3.1、rspec、guard capybara 和 spork。我使用了 guard pig 肉 gem 。这是我运行 bundle exec guard 时得到的

查看“在 421.87 秒内完成”这一行。那是一项测试!

我看到我收到了一个错误,guard-spork 提示没有 fork 支持(Windows 问题),但稍后这一行“./magazine_slave.rb:22:in `run'”应该表明 magazine_slave 运行(Windows 运行 spork with magazine而不是 fork )。

有任何想法吗?

Guard is now watching at 'c:/Users/Andreas/My Documents/Aptana Studio 3 workspace/maktaba'
'awk' is not recognized as an internal or external command,
operable program or batch file.
'awk' is not recognized as an internal or external command,
operable program or batch file.
Starting Spork for Test::Unit & RSpec
ERROR: Guard::Spork failed to achieve its <start>, exception was:
NotImplementedError: fork() function is unimplemented on this machine
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-spork-0.3.1/lib/guard/spork/runner.rb:40:in `fork'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-spork-0.3.1/lib/guard/spork/runner.rb:40:in `spawn_child'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-spork-0.3.1/lib/guard/spork/runner.rb:23:in `launch_sporks'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-spork-0.3.1/lib/guard/spork.rb:17:in `start'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:322:in `send'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:322:in `run_supervised_task'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:320:in `catch'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:320:in `run_supervised_task'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:153:in `start'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:254:in `run_on_guards'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:253:in `each'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:253:in `run_on_guards'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:252:in `catch'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:252:in `run_on_guards'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:251:in `each'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:251:in `run_on_guards'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard.rb:152:in `start'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/lib/guard/cli.rb:68:in `start'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/thor-0.14.6/lib/thor/task.rb:22:in `send'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/gems/guard-0.8.8/bin/guard:6
c:/Ruby/Ruby187/lib/ruby/gems/1.8/bin/guard:19:in `load'
c:/Ruby/Ruby187/lib/ruby/gems/1.8/bin/guard:19

Guard::Spork has just been fired
Guard::RSpec is running, with RSpec 2!
Running all specs
F

Failures:

  1) UserCruds Creates a new user
 Failure/Error: click_button "Submit"
 ActionView::Template::Error:
   You have a nil object when you didn't expect it!
   You might have expected an instance of Array.
   The error occurred while evaluating nil.map
 # ./app/views/users/_form.html.erb:38:in `_app_views_users__form_html_erb___24339687_119563452'
 # ./app/views/users/_form.html.erb:3:in `_app_views_users__form_html_erb___24339687_119563452'
 # ./app/views/users/new.html.erb:3:in `_app_views_users_new_html_erb___963176717_119608284'
 # ./app/controllers/users_controller.rb:52
 # ./app/controllers/users_controller.rb:47:in `create'
 # (eval):2:in `send'
 # (eval):2:in `click_button'
 # ./spec/requests/user_cruds_spec.rb:16
 # ./magazine_slave.rb:22:in `run'
 # magazine_slave_provider.rb:17

Finished in 421.87 seconds
1 example, 1 failure

最佳答案

因为 rspec 加载了 rails 环境,所以很慢。你拥有的 gem 越多,它变得越慢

这就是为什么 spork 是一个很好的工具。它加载 rails 环境,guard 可以在不重新加载 rails 环境的情况下查找更改。但是guard-spork gem中有一个错误。它不适用于 Windows,因为它依赖于 fork。即使是坚硬的 spork 也不要在 windows 上使用 fork - spork 可以。非 UNIX 系统不支持 Fork。

我研究了这个问题并最终采用了不同的方法。我制定了 lib 文件夹的逻辑,并且不在规范中包含 spec_helper 文件。然后 Rails 不会被加载,只有特定的测试逻辑。这很快,迫使我编写更具可读性的代码。

在 Cory Haines 的演讲中查看这个 video,了解更多关于这个主题的信息。

关于ruby-on-rails - Rails 3.1、rspec、guard 和 spork 在 Windows 上真的很慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8029912/

10-15 08:04