让Rspec +自动测试在Windows上运行

时间:2010-10-04 00:28:19

标签: windows-7 ruby-on-rails-3 rspec

我在我的Windows 7机器上安装了growl + rspec + autotest。在命令提示符下,当我输入'rspec spec /'时,它不起作用。只有当我使用'rake spec /'+'autotest'时,测试才会运行。

另外,我正在运行这些测试:http://railstutorial.org/chapters/static-pages#code:default_pages_controller_spec(即非常非常微不足道),他们需要8.11秒。

当我运行它们时它们也会失败 - 即使它们不在示例中。我完成了教程告诉我的所有内容,问题是教程在Windows机器上安装rspec并没有太深入。它提供了一个链接,但即使这样,你也必须将指令放在一起。

我得到的错误是'Failure/Error: Unable to find C to read failed line [31mundefined methord get' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x48336c0>'

第二个错误非常类似。

我还正确安装了Growl,因为我收到了两次失败的通知。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

我做了一些谷歌搜索,根据this thread on the rspec ruby forumthis closed rspec-rails issue,这是一个已修复的rspec-rails的问题。

我使用rails 3.0.3在Windows 7上运行Ruby 1.9.2p136。

这就是我的Gemfile的样子,它显示了我正在使用的rspec和rspec-rails的版本:

source 'http://rubygems.org'

gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'

group :development do
  gem 'rspec-rails', '2.4.1'
end

group :test do
  gem 'rspec', '2.4.0'
  gem 'webrat', '0.7.1'
end

我说“看起来像”,因为当我尝试运行rspec rails生成器时,这就是我得到的:

C:\Ruby\sample_app>rails generate rspec:install
  create  .rspec
  create  spec
  create  spec/spec_helper.rb
Could not find "autotest" in any of your source paths. Your current source paths
 are:
C:/Ruby/sample_app/lib/templates/rspec/install
C:/Ruby/192-stackoverflow/lib/ruby/gems/1.9.1/gems/rspec-rails-2.3.0/lib/generators/rspec/install/templates

然后我将自动测试添加到我的Gemfile中(并再次进行捆绑安装),然后尝试使用rails生成rspec:再次安装并且没有任何错误。所以这就是我的Gemfile现在的样子:

source 'http://rubygems.org'

gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'

group :development do
  gem 'autotest'
  gem 'rspec-rails', '2.4.1'
end

group :test do
  gem 'rspec', '2.4.0'
  gem 'webrat', '0.7.1'
end

此安装的自动测试版本为4.4.6:

C:\Ruby\sample_app>bundle show autotest
C:/Ruby/192-stackoverflow/lib/ruby/gems/1.9.1/gems/autotest-4.4.6

然后我按照教程中的说明创建了控制器:

$ rails generate controller Pages home contact

我能够运行“bundle exec autotest”和“rspec spec /”而不会出现您所看到的错误:

C:\Ruby\sample_app>bundle exec autotest
loading autotest/rspec2
bundle exec C:\Ruby\192-stackoverflow\bin\ruby -S C:/Ruby/192-stackoverflow/lib/ruby/gems/1.9.1/gems/rspec-core-2.4.0/bin/rspec --tty 'C:/Ruby/sample_app/spec/controllers/pages_controller_spec.rb'
..

Finished in 23.04 seconds
2 examples, 0 failures
# I killed autotest with CTRL-c at this point
Interrupt a second time to quit
Terminate batch job (Y/N)? y
Terminate batch job (Y/N)? y


C:\Ruby\sample_app>rspec spec/
..

Finished in 23.11 seconds
2 examples, 0 failures

我还继续学习本教程,为“关于”页面编写规范,同时自动测试正在运行,并且它在我的更改中运行时没有任何问题。

所以请尝试:

  1. 将Gemspec更新为与此处发布的第二个类似
  2. 正在运行'bundle install'
  3. 运行'bundle exec autotest'
  4. 如果有效,请告诉我。我会回来看看!

答案 1 :(得分:2)

我认为这可能会帮助那些可能遇到麻烦的人,因为所有宝石都已经更新了(特别是那些使用Ruby on Rails 3教程的人):

我能够使用所有宝石的最新版本来实现这一点:

我的Gemfile:

source 'https://rubygems.org'

gem 'rails', '3.2.6'
gem 'jquery-rails'

gem 'sqlite3', :group => [:development, :test]
gem 'pg', :group => :production #This is so Heroku will work

group :development do
  gem 'rspec-rails'
end

group :test do
  gem 'rspec'
  gem 'webrat'
  gem 'spork-rails'  #Use this is only if you want to use spork
end

如果您已经有旧版本(例如,使用Ruby on Rails 3教程),请确保清理rspec: https://stackoverflow.com/a/4433217/911133

要使用自动测试,请按照此处的说明进行操作:https://github.com/svoop/autotest-growl

请注意,安装growl-for-windows是该交易的一部分,并且需要 http://www.growlforwindows.com/

您的.autotest文件可以位于两个地方之一

1)您的HOME目录,即(示例):

C:\users\joeblow\.autotest

2)rails应用程序根目录(这将仅适用于该应用程序)

我的.autotest文件如下所示:

require 'autotest/growl'
require 'autotest/restart'
require 'autotest/timestamp'

Autotest.add_hook :initialize do |autotest|
  autotest.add_mapping(%r%^spec/(requrests)/.*rb$%) do
|filename, _|
filename
end
end

Autotest::Growl::clear_terminal = false

确保您已完成'捆绑安装'

然后运行Growl for windows(开始菜单或在Windows启动时启动)

在命令行中运行自动测试,你应该好好去!

c:\users\joeblow\workspace\Rails\MyRailsProject> autotest

答案 2 :(得分:1)

我还没有找到一个可行的永久性修复,但显然它归结为一个路径问题 - 某些东西正在改变窗口路径并且它会中断。但是,有一个解决方法:

在你的描述中,在“获取”调用之前,将其放在:

包括RSpec :: Rails :: ControllerExampleGroup

以下是使用控制器生成的Rails规范的示例代码。请注意,它位于范围的开头:

require 'spec_helper'

describe PagesController do
  include RSpec::Rails::ControllerExampleGroup

  describe "GET 'home'" do
    it "should be successful" do
      get 'home'
      response.should be_success
    end
  end

  describe "GET 'contact'" do
    it "should be successful" do
      get 'contact'
      response.should be_success
    end
  end

end

有一个我见过的修复建议改变spec_helper(在Rails案例中),但我无法让它工作。

编辑:更多的研究表明这是autospec的一个问题 - 如果您只是使用rspec,这种解决方法将起作用,但不适用于自动测试。但是,我无法为此找到解决方案。