我有一个控制器,它在特定的条件下在特定的点重定向。当我将参数传递给控制器规范中的spec助手方法(使用最新的RSpec)以触发这些条件时,我会得到一个
ActionView::MissingTemplate错误。在仔细检查时,当我应该重定向时,我做了如下一行:
redirect_to root_path && return然后在我的测试套件中抛出一个异常。我在应该调用的控制器的索引函数中设置了一个断点(我要重定向到的路由是指向的),并且它从未在我的测试套件中被调用。当我只是在我的开发环境和生产中运行它时,这段代码似乎可以工作,但是对于这个测试,它是不会改变的。有什么想法吗?
我的测试看起来是这样的:
describe TestController do
it 'redirects properly with failure' do
get :create, provider: 'test', error: 'access_denied'
expect(response.body).to match 'test'
end
end编辑:
更新!
似乎改变了我的重定向
redirect_to root_path and return在RSpec工作。
我不知道为什么&&操作符的优先级会破坏规范。有人能解释一下这里发生了什么吗?
发布于 2016-05-13 13:28:20
根据导轨
确保使用
and return而不是&& return,因为在&& return语言中,由于运算符优先,&& return将无法工作。
如果您更喜欢使用&&,请将参数括在括号中render中:
redirect_to(root_path) && return发布于 2016-05-13 13:45:53
差异&&的优先高于and。高优先级导致ruby将其解析为
redirect_to(root_path && return)当然,方法必须在调用方法本身之前计算它们的参数,因此在这种情况下,redirect_to永远不会被调用,因为ruby首先命中了return。
另一方面,and的低优先级意味着它被解析为
(redirect_to root_path) and return这就是你想要的--先重定向,然后再回来。
发布于 2015-09-25 01:18:51
测试控制器时必须存在模板,因为默认情况下视图是存根的。
因此,请确保您有用于控制器操作的模板。
https://stackoverflow.com/questions/32772996
复制相似问题