[英]The site is working perfect but I've got an error when I run “bundle exec rake test” -2
[英]The site is working perfect but I've got an error when I run “bundle exec rake test”
我已經為我的應用程序添加了微博支持按鈕,如果用戶支持微博,則該按鈕將變為“不支持”。 一切都在localhost上運行良好,但是當我運行“ bundle exec rake test”時,出現錯誤。
錯誤
$ bundle exec rake test
1) Error:
UsersProfileTest#test_profile_display:
ActionView::Template::Error: undefined method `supports' for nil:NilClass
app/views/shared/_support_form.html.erb:1:in `_app_views_shared__support_form_html_erb__582342844135452036_70190475648520'
app/views/microposts/_micropost.html.erb:21:in `_app_views_microposts__micropost_html_erb___1173022564425897832_70190475500520'
app/views/users/show.html.erb:19:in `_app_views_users_show_html_erb__2940108544736749993_70190457308940'
test/integration/users_profile_test.rb:14:in `block in <class:UsersProfileTest>'
78 runs, 286 assertions, 0 failures, 1 errors, 0 skips
_support_form.html.erb
<% if support = current_user.supports.find_by_micropost_id(micropost.id) %>
<% micropost.supports.each do |support| %>
<% if current_user?(support.user) %>
<button class="btn" type="submit">
<%= link_to "Not Support", [support.micropost, support], method: :delete %>
</button>
<% end %>
<% end %>
<% else %>
<%= form_for ([micropost, @support]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.hidden_field :micropost_id %>
<%= f.hidden_field :user_id %>
<button class="btn" type="submit">
Support
</button>
<% end %>
<% end %>
_micropost.html.erb
<%= render 'shared/support_form', micropost: micropost %>
supports_controller.rb
def create
@support = Support.new(micropost_id: params[:micropost_id], user: current_user)
if @support.save
redirect_to request.referrer || root_url
else
redirect_to request.referrer || root_url
end
end
def destroy
@support.destroy
redirect_to request.referrer || root_url
end
默認情況下,您確實在測試中擁有經過身份驗證的用戶,所以current_user
返回nil
。 如果用戶不經登錄就以某種方式訪問該頁面,則在生產中可能會發生相同的錯誤。
如果您使用devise進行身份驗證-請參閱測試助手上的devise Wiki
class SomeControllerTest < ActionController::TestCase
include Devise::TestHelpers
def setup
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in FactoryGirl.create(:user) # or other method of making/getting test user
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.