我正在try 从控制器规范中设置会话对象.

it 'use invalid coupon' do
  session[:coupon] = 'abcd'      
  Service.any_instance.stub(:validate_coupon).with(session[:coupon]).and_return('abcd')

  get :index
  expect(flash[:coupon__notice]).to be nil
end

但当我判断会话时,我得到的不是@优惠券对象,而是一个@data,其中包含字符串"优惠券",测试失败.

推荐答案

这在第4节"控制器的功能测试"中的Guide to Testing Rails Applications中进行了解释.get操作采用params散列and会话散列,例如:

get(:show, {'id' => "12"}, {'user_id' => 5})

您应该能够为示例中的params散列传入nil,然后传入所需的会话参数:

get :index, nil, {coupon: 'abcd'}

我建议所有使用RSpec进行Rails测试的人都仔细阅读Rails指南.rspec-rails利用了现有的Rails测试类,这一点在rspec-rails文档中没有明确说明.

Ruby-on-rails相关问答推荐

如何修改使用Google Cloud App Engine部署rails 7应用程序的步骤

在Ruby中按特定值合并时,将两个对象数组添加到一起

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

Rails - Comment.count没有改变1

如何获取 Rails 表单构建器将为某个字段生成的 HTML名称属性?

使用带有 bootstrap-sass gem 的 Rails 4 无法让 CSS 在 Heroku 上工作

Rails:如何访问 RESTful 助手?

注册表单上是否需要 CSRF 保护?

Rails 3 中的动态错误页面

使用devise gem点击确认链接后避免登录?

在 ruby​​ on rails 上构建方法

按周/月/等和 ActiveRecord 分组?

Rails - 具有空数组的强参数

我应该将全局共享部分模板放在哪个文件夹中?

Ruby on Rails - link_to 按钮 / css

如何使用 Rspec 判断 ActiveJob 中排队的内容

从 ActiveRecord 对象中提取两个属性的快捷方式?

是否可以设置 travis 来运行多种语言的测试?

sass-rails 助手image-url、asset-url在 rails 3.2.1 中不起作用

将数组传递到 hidden_​​field ROR