2

克隆最新的稳定版本后

进入一个干净的rails应用程序,并遵循(我相信是)每个插件的所有说明,黄瓜故事仍然失败:-(。这是问题的总结:

  1. 尽管创建了 'map.root :controller => "my_controller"' 路由,但重定向并不能立即工作:
    预期重定向到“/”,没有重定向(Spec::Expectations::ExpectationNotMetError)
    /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations.rb:57:in `fail_with'
    /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/handler.rb:14:in `handle_matcher'
    /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb:31:in `should'。
    /features/step_definitions/user_steps.rb:111:in `/^an? (.*) 用户名​​为 '(.*)'$/'
    features/sessions.feature:25:in `和一个名为'reggie'的激活用户'
    
  2. 故事说尽管文件调用 该logged_in?方法受到保护:features/step_definitions/ra_env.rb
    ApplicationController.send(:public, :logged\_in?, :current\_user, :authorized?)
    该调用不是使这些方法无需存根即可使用吗?

哦,我正在尝试运行 autospec,所以我执行了以下命令来启动它:

导出 AUTOFEATURE=true
耙规格:服务器:开始
红宝石脚本/自动规范
4

7 回答 7

2

我做了一些研究,这就是我得到的。ra_response_steps.rb期望重定向变得粗糙,然后定义是否应该遵循重定向的故事。这是失败的,因为 Webrat Session 实现具有以下代码:

    def request_page(url, http_method, data) #:nodoc:
      h = 标题
      h['HTTP_REFERER'] = @current_url 如果@current_url

      debug_log "请求页面:#{http_method.to_s.upcase} #{url} 与 #{data.inspect} 和 HTTP 标头 #{h.inspect}"
      如果 h.empty?
        发送“#{http_method}”,网址,数据|| {}
      别的
        发送“#{http_method}”,网址,数据|| {}, H
      结尾

      如果 exception_caught,保存_and_open_page?&& Webrat.configuration.open_error_files?
      raise PageLoadError.new("页面加载不成功(代码:#{response_code.inspect}):\n#{formatted_error}")除非success_code?

      重启

      @current_url = 网址
      @http_method = http_method
      @数据 = 数据

      如果内部重定向?
        check_for_infinite_redirects
        request_page(response_location, :get, {})
      结尾

      返回响应
    结尾

注意if internal_redirect? ... end. 这就是使我们的测试失败的原因,因为 webrat 正在跟踪重定向。作为一种解决方法,您可以在 webrat 会话中评论这些行,但这可能不是一个体面的解决方案。我会做更多的工作并在某处发布补丁。

于 2009-03-31T23:07:24.967 回答
2

我发现这篇博文很好地解释了问题的症结所在:

http://blog.andrew.premdas.org/articles/2008/10/15/webrat-visits-and-redirects

基本上,restful 身份验证测试正在尝试测试不应该使用 webrat 测试的东西。因此,上面推荐的更改与我认为可能应该更改的相反。

我已经更改了 Restful 身份验证测试,以便它们不测试重定向,而只是测试您最终进入的页面。但是,某些我不理解的重定向似乎仍然存在问题:

Then she should be at the new session page                     # features/step_definitions/ra_response_steps.rb:15
  expected "session/new", got redirected to "http://www.example.com/session/new" (Spec::Expectations::ExpectationNotMetError)

我不明白这个 example.com 是从哪里来的。其他人有类似的错误吗?

于 2010-02-02T06:53:25.377 回答
1

我不得不将 user_steps.rb 中注销功能的定义更改为:

def log_out
  get '/logout'
结束

在它试图获取仅在您不删除默认路由时才存在的“/session/destroy”之前。

此外,请确保您在 application_controller 中“包含 AuthenticatedSystem”。

尽管如此,仍在努力解决其他一些问题......

于 2009-03-29T18:41:04.437 回答
1

至于“受保护的方法”问题,我发现如果我不使用 autospec 并保留 config.cache_classes=true,那么测试通过。

将 config.cache_classes=false 再次引入错误。

似乎问题在于如何在 rails 中实现类缓存,或者 rspec 如何管理已创建的类。不幸的是,我没有资源对整个日志进行更多调查,并且似乎在以下位置进行了很好的讨论: http ://groups.google.com/group/rspec/browse_thread/thread/500ede090bd08996/ 25a3d9a7d283696b?lnk=gst&q=cache_classes#25a3d9a7d283696b

于 2009-04-05T18:07:56.387 回答
0

我没有太多的指导可以提供,只是同情——我最近花了几个小时来处理同样的问题。从好的方面来说,这就是我学习 RSpec 的方式。

我确实发现的一件事是,很多失败都是我想改变的——例如,我不想在登录时重定向到“/”,而是在其他地方。

最后,大多数故障都很容易解决,只要我想好去哪里找。

于 2009-03-25T17:10:18.087 回答
0

我正在解决同样的问题。我还没有,但我认为 ApplicationController.send(:public, :logged_in?, :current_user, :authorized?) 需要进入 support/env.rb 。

于 2009-03-27T03:19:05.590 回答
0

我也得到了一些提到的错误。但是我的应用程序中出现的第一个问题是:

多个步骤定义具有相同的正则表达式:

features/step_definitions/user_steps.rb:16:in /^(.*) (.*) user named '(.*)'$/' features/step_definitions/user_steps.rb:29:in/^there is no (.*) user named '(.*)'$/'

(黄瓜::冗余)

当然,我可以解决这个问题,但会出现更多错误(包括控制器上受保护的 logged_in? 方法、失败的 RSpecs 等等)。

有谁知道,我们是否在这里都做错了什么?或者仅仅是restful_authentication在其当前版本中被破坏了?

于 2009-07-03T14:27:22.363 回答