gpt4 book ai didi

refactoring - RSpec:如何在 Controller 中 stub Sorcery 方法调用?

转载 作者:行者123 更新时间:2023-12-01 02:41:42 25 4
gpt4 key购买 nike

Controller :

class SessionsController < ApplicationController
layout 'login'

def create
user = login(params[:username], params[:password])
if user
redirect_back_or_to root_url
else
flash.now.alert = "Username or password was invalid"
render :new
end
end
end

测试:
require 'spec_helper'

describe SessionsController do

describe "POST create" do

before(:each) { Fabricate(:school) }

it "Should log me in" do
post(:create, {'password' => 'Secret', 'username' => 'director'})
response.should redirect_to('/')
end
end

end
Fabricate(:school)有一个生成第一个用户的回调。我想重构此代码,以便根本不使用任何数据库调用。我想 stub 登录调用,以便它返回 true。

我怎么能 stub login方法?它来自巫术。

https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller.rb#L31

最佳答案

由于 Sorcery 登录方法作为实例方法添加到 Controller 中,因此您必须在当前 Controller 实例上模拟该方法,即“@controller”。见 http://api.rubyonrails.org/classes/ActionController/TestCase.html .

使用 Flexmock:

flexmock(@controller).should_receive(:login).and_return(flexmock('user')).once

或 RSpec 模拟:
@controller.stub(:login) { double "user" }

关于refactoring - RSpec:如何在 Controller 中 stub Sorcery 方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8085805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com