gpt4 book ai didi

ruby-on-rails - 无法模拟数据库和 stub :save

转载 作者:行者123 更新时间:2023-12-04 21:42:24 25 4
gpt4 key购买 nike

首先,我是模拟/ stub 的新手,我在模拟/ stub 方面遇到了麻烦

这是我的应用程序代码:

describe 'Register an User' do
VALID_USERNAME = "..."
VALID_PASSWORD = "..."
VALID_USER = User.new(VALID_USERNAME, VALID_PASSWORD)

before (:each) do
User.any_instance.stub(:save).and_return(true)
end

it 'should create a new user' do
post :create, :username => VALID_USERNAME, :password => VALID_PASSWORD
expect(response.status).to eq(201)
#user_inserted = ...
#expect(user_inserted).to eq(VALID_USER)
end
end

和:
def create
username = params[:username]
password = params[:password]
if not username or not password
render :json => '', :status => 400
else
success = User.new(username, password).save
if success
render :json => '', :status => 201
else
render :json => '', :status => 500
end
end
end

我正在尝试模拟 ActiveRecord,以测试“创建”,而无需测试“获取”。
这里的想法是当我调用 'user.save' 可以在不使用数据库的情况下保存用户,然后我会在我的测试用例中访问,所以我保证用户被“插入”到我的数据库中。

如果我运行我的测试,它会通过,但我不会验证我愿意做什么。任何帮助或想法?

谢谢!

最佳答案

这是没有意义的,因为您无法在不插入数据库的情况下测试数据库中的插入。为什么?

Rails 带有内置验证,它成为保存项目的第一步。如果验证通过,项目将通过 ActiveRecord 插入数据库中。数据库验证从这一步开始,如果有任何失败,它们会引发异常。

所以。如果要测试用户是否可能在数据库中创建,请将验证添加到与数据库匹配的模型中。然后你就可以使用方法is_valid? .

这将确保您的用户有效地存储在数据库中。因此,您将能够在任何地方使用它:user_instance.is_valid?定义一个可插入的项目。

我希望这就是你所问的。

关于ruby-on-rails - 无法模拟数据库和 stub :save,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23147442/

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