2015-05-31 24 views
0

我正試圖按照https://stackoverflow.com/a/17002140/4499505上的建議編寫測試。`Assigns`在我的集成測試中不起作用

我的簡化的測試:

test "test" do 
    log_in_as(@user) 
    get users_path 
    assert_template 'users/index' 
    assigns[:users].each do 
    assert_select 'a[href=?]', users_path(user) 
    end 
end 

的錯誤結果:

NoMethodError: undefined method `each' for nil:NilClass 

控制器方法:

def index 
    @users_grid = initialize_grid(User.where(verified: true), 
     per_page:  15, 
     order:   'users.username', 
     order_direction: 'desc') 
    end 

Apparantly assigns[:users]爲空,即使有在夾具文件的用戶。我究竟做錯了什麼?我知道assigns[:users]應該指定與users/index上顯示的完全相同的用戶,這正是我想要的。

+0

顯示控制器的動作...... –

+0

添加到原來的職位 – Nick

+1

你需要做的'受讓人[:users_grid]' –

回答

1

那麼,你的正確的代碼是:

test "test" do 
    log_in_as(@user) 
    get users_path 
    assert_template 'users/index' 
    # in your controller you have the instance var as 
    # @users_gird, not @users. 
    assigns[:users_grid].each do 
    assert_select 'a[href=?]', users_path(@user) 
    end 
end 

assigns is a hash,訪問內的Rails測試,包含所有實例變量,這將是提供給視圖在這一點上。它也是一個訪問器,它允許你用符號查找一個屬性(因爲歷史上,分配哈希鍵都是字符串)。換句話說,assigns(:contact)assigns["contact"]相同。

+0

謝謝,這產生了錯誤'ActionController :: UrlGenerationError:沒有路由匹配{:操作=>「顯示」,:控制器=>「用戶」,:ID =>無}缺少必需的鍵:[:ID]'。在開發中,頁面正常工作。 – Nick

+0

@Nick現在試試.. –

+0

它有我害怕同樣的錯誤信息。 'users_path'是一個不應該帶一個id /參數的索引......錯誤消息引用了show方法,所以它看起來......相關的路由是:'users GET /users(.:format)users#index ' – Nick

0

請注意,您鏈接的答案與assigns[]中的符號與控制器操作中的實例變量的符號相匹配。

在你的情況下,你正在分配實例變量@users_grid,但試圖迭代assigns[:users]。你可能只是想後者更改爲assigns[:users_grid]

相關問題