我正在为一个有多个步骤的“注册”应用程序编写一些 Cucumber 故事。
与其编写一个 Huuuuuuuge 故事来一次涵盖所有步骤,那样会很糟糕,我宁愿像普通用户一样完成控制器中的每个操作。我的问题是我将在第一步中创建的帐户 ID 存储为会话变量,因此当访问第 2 步、第 3 步等时,会加载现有的注册数据。
我知道能够controller.session[..]
在 RSpec 规范内访问,但是当我尝试在 Cucumber 故事中执行此操作时,它会失败并出现以下错误(而且,我还在某处读过这是一种反模式等......):
使用 controller.session[:whatever] 或 session[:whatever]
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
使用会话(:随便)
wrong number of arguments (1 for 0) (ArgumentError)
所以,似乎加入会话存储是不可能的。我想知道的是是否有可能(我猜哪个是最好的..):
- 模拟会话存储等
- 在控制器中有一个方法并将其存根(例如
get_registration
,它分配一个实例变量......)
我浏览了 RSpec 书(好吧,略读)并浏览了 WebRat 等,但我还没有真正找到我的问题的答案......
再澄清一点,注册过程更像是一个状态机——例如,用户在注册完成之前要经过四个步骤——因此“登录”并不是一个真正的选择(它打破了网站工作方式的模型)...
在我的控制器规范中,我能够取消对基于会话变量加载模型的方法的调用 - 但我不确定“反模式”行是否也适用于存根和模拟?
谢谢!