Ecn*_*lyr 3 rspec stub ruby-on-rails-3 ruby-on-rails-3.2
我的产品控制器上有一个前置过滤器:
before_filter :authorize, only: [:create, :edit, :update]
Run Code Online (Sandbox Code Playgroud)
我的authorize
方法在我的定义中application_controller
:
def authorize
redirect_to login_url, alert: "Not authorized" if current_user.nil?
end
Run Code Online (Sandbox Code Playgroud)
和current_user定义为:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
Run Code Online (Sandbox Code Playgroud)
在我的rspec中,我正在尝试:
before(:each) do
session.stub!(:user_id).and_return("admin@email.com")
end
Run Code Online (Sandbox Code Playgroud)
但我仍然收到如下错误:
ProductsController PUT update with valid params redirects to the product
Failure/Error: response.should redirect_to(product)
Expected response to be a redirect to <http://test.host/products/1> but was a redirect to <http://test.host/login>
Run Code Online (Sandbox Code Playgroud)
...这意味着我的测试在请求时没有登录.
我在这里错过了什么?
有没有更好的方法来应对这种情况?
考虑到您正在测试控制器,并试图将其集中在控制器上,您可以current_user
使用真实用户或模拟来存储方法.
before(:each) do
ApplicationController.any_instance.stub(:current_user).and_return(@user = mock('user'))
end
Run Code Online (Sandbox Code Playgroud)
有了这个,您可以访问user
模拟以在需要时应用更多期望和存根.如果模拟阻碍了,请将其更改为真实User
对象.
归档时间: |
|
查看次数: |
1657 次 |
最近记录: |