以下测试的目的是确保为任何访问者分配角色
test "role for non logged in user" do
get root_path
puts ('role ' + @role.to_s)
assert @role == 'end consumer'
end
角色可以根据连接表进行更改,其中商店通过主机已知,并且在应用程序控制器中调用该流程
before_action :set_clean_host_site
该方法依次调用关注点中的方法来设置角色
def set_clean_host_site
rurl = request.host
if request.subdomains.empty?
rurl = 'www.' + rurl
end
clean_host = rurl.chomp("/")
@site = Site.where('host = ?', clean_host.to_s).first
if @site
session[:active_shop_id] = @site.shop_id
@shop = Shop.find(@site.shop_id)
set_role
else
@shop = Shop.find(1)
puts @shop.inspect
session[:active_shop_id] = @shop.id
set_role
puts @role
end
end
def set_role
if current_user
cu_rsu = Roleshopuser.where('user_id = ? AND shop_id = ?', current_user.id, @shop.id ).first
if cu_rsu
@role = cu_rsu.role.name
end
else
@role = 'consumer'
end
puts @role
end
a
shops.yml
夹具包含:
id_one:
id: 1
name: MyString
nation: one
slug: MyString
由此得出两个观察结果。
set_role
应该被解雇;该方法是确保角色归属的后备方法。 “看跌期权”收益率[商店空白]:
consumer
consumer
role
因此测试显然无法访问实例变量。
这种方法发生了什么/出了什么问题?
这并不是真正的灯具使用方法。如果您想获得特定的灯具,例如这个:
id_one:
name: MyString
nation: one
slug: MyString
不要分配 ID。然后在你的测试类中调用
shops(:id_one)
。 Minitest 将从中获取正确的商店固定装置。
由于这些名称(即
id_one
)由您决定,人们倾向于给它们赋予有意义的名称,例如角色。请注意如何使用灯具名称(而不是 ID)将一个灯具分配给另一个灯具。
# fixtures/users.yml
owner:
name: An Owner
consumer:
name: A Shopper
# fixtures/shops.yml
department_store:
name: ABC Department Store
# fixtures/roles.yml
owner:
name: owner
consumer:
name: consumer
# fixtures/roleshopuser.yml
owner:
user: owner
shop: department_store
role: owner
consumer:
user: consumer
shop: department_store
role: consumer