首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSpec redirect_to与回归与redirect_to && return

RSpec redirect_to与回归与redirect_to && return
EN

Stack Overflow用户
提问于 2015-09-25 00:26:15
回答 5查看 2K关注 0票数 8

我有一个控制器,它在特定的条件下在特定的点重定向。当我将参数传递给控制器规范中的spec助手方法(使用最新的RSpec)以触发这些条件时,我会得到一个

代码语言:javascript
复制
ActionView::MissingTemplate

错误。在仔细检查时,当我应该重定向时,我做了如下一行:

代码语言:javascript
复制
redirect_to root_path && return

然后在我的测试套件中抛出一个异常。我在应该调用的控制器的索引函数中设置了一个断点(我要重定向到的路由是指向的),并且它从未在我的测试套件中被调用。当我只是在我的开发环境和生产中运行它时,这段代码似乎可以工作,但是对于这个测试,它是不会改变的。有什么想法吗?

我的测试看起来是这样的:

代码语言:javascript
复制
describe TestController do
  it 'redirects properly with failure' do
    get :create, provider: 'test', error: 'access_denied'
    expect(response.body).to match 'test'
  end
end

编辑:

更新!

似乎改变了我的重定向

代码语言:javascript
复制
redirect_to root_path and return

在RSpec工作。

我不知道为什么&&操作符的优先级会破坏规范。有人能解释一下这里发生了什么吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-13 13:28:20

根据导轨

确保使用and return而不是&& return,因为在&& return语言中,由于运算符优先,&& return将无法工作。

如果您更喜欢使用&&,请将参数括在括号中render中:

代码语言:javascript
复制
redirect_to(root_path) && return
票数 13
EN

Stack Overflow用户

发布于 2016-05-13 13:45:53

差异&&优先高于and。高优先级导致ruby将其解析为

代码语言:javascript
复制
redirect_to(root_path && return)

当然,方法必须在调用方法本身之前计算它们的参数,因此在这种情况下,redirect_to永远不会被调用,因为ruby首先命中了return

另一方面,and的低优先级意味着它被解析为

代码语言:javascript
复制
(redirect_to root_path) and return

这就是你想要的--先重定向,然后再回来。

票数 6
EN

Stack Overflow用户

发布于 2015-09-25 01:18:51

测试控制器时必须存在模板,因为默认情况下视图是存根的。

因此,请确保您有用于控制器操作的模板。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32772996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档