gpt4 book ai didi

ruby-on-rails - @user.save 如何在 user_spec.rb 中工作? (rails 教程第 6 章)

转载 作者:行者123 更新时间:2023-12-04 06:14:20 25 4
gpt4 key购买 nike

我正在学习 Ruby on Rails 教程并且正在学习 Listing 6.29 .它描述了(看似标准的)用户身份验证过程的测试。

我的问题是理解 user_spec.rb 文件的以下(已编辑)部分:

describe User do

before do
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end

subject { @user }

describe "return value of authenticate method" do
before { @user.save }
let(:found_user) { User.find_by_email(@user.email) }

describe "with valid password" do
it { should == found_user.authenticate(@user.password) }
end

describe "with invalid password" do
let(:user_for_invalid_password) { found_user.authenticate("invalid") }

it { should_not == user_for_invalid_password }
specify { user_for_invalid_password.should be_false }
end
end
end

我的主要困惑是这条线:

before { @user.save }

这是否真的将测试用户保存在数据库中?在测试其密码正确性之前保存此测试用户不会使测试变得多余吗? 在我看来我只是在保存用户(及其密码),然后检查它是否仍然具有相同的密码(我刚刚用它保存了它!)有人能够澄清为什么我搞错了吗?

最佳答案

是的,它确实将用户保存在数据库中(很可能在下一次测试之前被 database_cleaner 或其他东西清除 - 测试通常意味着大多数情况下彼此隔离运行,而不是通常使状态永久化)。

与使测试冗余相反,它是必需的元素。有问题的测试是针对 authenticate 方法,而不是用户创建。正在创建用户以测试针对它的身份验证方法。基本上,这里发生的事情是它正在创建用户,然后尝试首先使用有效密码验证同一用户,然后使用无效密码,以确保验证方法的正确功能。

关于ruby-on-rails - @user.save 如何在 user_spec.rb 中工作? (rails 教程第 6 章),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281043/

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