【问题标题】:How can I spec out an authlogic sessions controller using using a stub?如何使用存根指定 authlogic 会话控制器?
【发布时间】:2009-11-03 10:13:45
【问题描述】:

我想测试我的用户会话控制器,测试用户会话首先构建然后保存。我的 UserSession 类如下所示:

class UserSession < Authlogic::Session::Base
end

我的 UserSessionsController 的 create 方法如下所示:

def create
    @user_session = UserSession.new(params[:user_session])
    if @user_session.save
        flash[:notice] = "Successfully logged in."
        redirect_back_or_default administer_home_page_url
    else
        render :new
    end
end

我的控制器规格如下所示:

describe UserSessionsController do

    it "should build a new user session" do
        UserSession.stub!(:new).with(:email, :password)
        UserSession.should_receive(:new).with(:email => "some_email@gmail.com", :password => "foobar")
        post :create, :user_session => { :email => "some_email@gmail.com", :password => "foobar" }
    end
end

我将新方法存根,但在运行测试时仍然出现以下错误:

Spec::Mocks::MockExpectationError in 'UserSessionsController should build a new user session'
<UserSession (class)> received :new with unexpected arguments
  expected: ({:password=>"foobar", :email=>"some_email@gmail.com"})
       got: ({:priority_record=>nil}, nil)

虽然在调用我的控制器代码之前在 UserSession 上调用了新方法。调用 activate_authlogic 没有区别。

【问题讨论】:

  • 我看到了类似的问题,但我得到: Spec::Mocks::MockExpectationError in 'UserSessionsController POST 'create' when not logged in should start a new user session' 收到:新的预期参数:({:password=>"test", :login=>"quentin"}) got: ([{:priority_record=>nil}, nil], [{:priority_record=>nil }, nil], [{"login"=>"quentin", "password"=>"test"}])

标签: ruby-on-rails rspec authlogic


【解决方案1】:

当我在 UserSession 上收到额外的带有 ({:priority_record=>nil}, nil) 的新消息时,这对我有用

UserSession.should_receive(:new).at_least(1).times.with({ :email => "some_email@gmail.com", :password => "foobar" })

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 2011-01-03
    • 2016-08-24
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多