我有一个名为 set_current_user
的action_action
def set_current_user
CurrentUser.set(current_user) do
yield
end
end
在CurrentUser单例中
def set(user)
self.user = user
yield
ensure
self.user = nil
end
我无法弄清楚如何将产量存根并且没有被调用方法的确保部分
理想情况下我想做点什么
it 'sets the user' do
subject.set(user)
expect(subject.user).to eql user
end
我得到的两个错误
-
没有给出阻止
-
当我传递一个块时
self.user = nil
被调用
提前致谢
3 回答
需要指出的一些事情可能会有所帮助:
ensure
保留用于您想要运行的代码块,无论发生什么情况,因此self.user
始终为nil
的原因 . 我认为你想要的是如果有异常则将用户分配给nil . 在这种情况下,您应该使用rescue
.至于单元测试,你想要的只是测试
CurrentUser
类中的.set
方法 . 假设您在周围的过滤器中正确连接了所有内容,这里有一个可能适合您的示例:希望这可以帮助!
我不确定你打算用这个做什么,因为看起来你只是想确保在块中设置
user
然后取消设置 . 如果是这种情况,那么以下应该可以正常工作这将检查块内(调用yield的位置)
subject.user
等于user
,之后subject.user
为零 .Output :
我没有提到我需要在每次请求后清除用户 .
这就是我提出的 . 把它的期望放在lambda中有点疯狂,但确保用户在处理请求之前设置并在之后清除它