rails minitest 未正确拾取夹具,实例变量未渗透

问题描述 投票:0回答:1

以下测试的目的是确保为任何访问者分配角色

  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

由此得出两个观察结果。

  1. 未找到商店 ID 为 (1) 的灯具。但这不应该妨碍该方法完成..
  2. set_role
    应该被解雇;该方法是确保角色归属的后备方法。 “看跌期权”收益率[商店空白]:

consumer
consumer
role 

因此测试显然无法访问实例变量。

这种方法发生了什么/出了什么问题?

ruby-on-rails minitest
1个回答
0
投票

这并不是真正的灯具使用方法。如果您想获得特定的灯具,例如这个:

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
© www.soinside.com 2019 - 2024. All rights reserved.