加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在AuthLogic控制器规范中使用模拟模型?

发布时间:2020-12-17 02:50:19 所属栏目:百科 来源:网络整理
导读:我试图在不使用灯具的情况下为控制器编写规格(而不是使用模拟模型).该控制器要求用户登录,我在 author’s recommendations之后使用 AuthLogic. describe UsersController do def mock_user(stubs={}) @mock_user ||= mock_model(User,stubs) end context 'wh
我试图在不使用灯具的情况下为控制器编写规格(而不是使用模拟模型).该控制器要求用户登录,我在 author’s recommendations之后使用 AuthLogic.

describe UsersController do

  def mock_user(stubs={})
    @mock_user ||= mock_model(User,stubs)
  end

  context 'when logged in' do
    before { activate_authlogic }

    it "exposes the logged-in user as @user in response to GET (show)" do
      UserSession.create(mock_user)
      ...
    end

    ...
  end

  ...
end

这些示例都在UserSession.create(…)行中失败,报告的效果如下:

Mock 'User_1005' received unexpected message :changed? with (no args)

我不知道如何解决这个问题;嘲笑:改变了吗? =>假适当吗?

解决方法

Iain发布了一个 solution to using mock objects with AuthLogic.要重新说明,以下助手进入spec_helpers.rb:

def current_user(stubs = {})
  @current_user ||= mock_model(User,stubs)
end

def user_session(stubs = {},user_stubs = {})
  @current_user_session ||= mock_model(UserSession,{:user => current_user(user_stubs)}.merge(stubs))
end

def login(session_stubs = {},user_stubs = {})
  UserSession.stub!(:find).and_return(user_session(session_stubs,user_stubs))
end

def logout
  @user_session = nil
end

我已将其纳入我的规格中,我发现它完全符合我的希望.我有工作的控制器规范,为登录用户部署模拟模型,所以现在,当我向User添加一个字段时,它们并没有全部中断. Iain在规范中实现这一点的例子如下:

describe SecretsController do
  before { login }
  it "should be very very secret!"
end

附:我讨厌回答我自己的问题,但这是我正在寻找的答案;我只是没有及早发现它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读