gpt4 book ai didi

ruby-on-rails - 是否可以在 rolify gem 的集成测试中测试 after_create 方法?

转载 作者:行者123 更新时间:2023-11-28 20:54:25 25 4
gpt4 key购买 nike

我正在使用 Rolify gem 来分配用户角色。它似乎工作成功,我的所有测试都顺利通过。然而,有一项测试似乎不起作用。

Rolify 提供添加 after_create,我将其添加到我的用户模型中:

after_create :assign_mod_role

def assign_mod_role
self.add_role :moderator, self.organization
end

这会将主持人角色分配给创建的每个用户(创建的用户始终与组织相关联)。这在开发中有效。我创建的集成测试:

test "user signup" do
log_in_as(@admin) #@admin of @organization1
assert_difference 'User.count' do
post adduser_path, user: { email: "ppppp@pppp.pp",
username: "pppppp",
password: "pppppp",
password_confirmation: "pppppp" }
end
testuser = assigns(:user)
assert_equal testuser.has_role?(:moderator, @organization1), true
end

然而,最后一行失败了。 我是不是做错了什么或者无法测试 after_create 方法?也许 Rolify 管理角色的方式不允许对此进行测试?


测试日志最后三行:

 [1m [36m (0.5ms) [0m   [1mSELECT COUNT(*) FROM "users" [0m
[1m [35mRole Load (0.5ms) [0m SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 AND ((((roles.name = 'moderator') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL)) OR ((roles.name = 'moderator') AND (roles.resource_type = 'Organization') AND (roles.resource_id IS NULL)) OR ((roles.name = 'moderator') AND (roles.resource_type = 'Organization') AND (roles.resource_id = 980190962)))) [["user_id", 1067176257]]
[1m [36m (0.5ms) [0m [1mROLLBACK [0m

最佳答案

after_createActiveRecord::Callbacks 的一部分- 它与 Rolify 没有任何关系。您应该带着极端的偏见使用模型回调。通常很难控制它们何时被解雇,而且它们通常不利于测试。我会说这是一种你不应该使用回调的情况。改为在您的 Controller 中执行。

如果您要执行很多创建对象的步骤,那么一个好的解决方案是在您的模型上使用服务对象或工厂方法来保持您的 Controller 精简。

关于ruby-on-rails - 是否可以在 rolify gem 的集成测试中测试 after_create 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149843/

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