所以我在Michael Hartl(偉大的)RoR教程的chapter 11。 完成第10章之後,我決定將micropost表單添加到用戶的個人資料頁面,以便您可以從那裏發帖,而不僅僅是從主頁。Michael Hartl的Ruby on rails教程 - Rspec測試失敗 - 未定義的方法`microposts'
我設法使它工作得很好,但它在某種程度上崩潰我的測試套件...
下面是錯誤信息,我從Rspec的獲得,爲我所有的User_pages_spec.rb個人資料頁面測試:
UserPages profile page
Failure/Error: before { visit user_path(user) }
NoMethodError:
undefined method `microposts' for nil:NilClass
# ./app/controllers/users_controller.rb:17:in `show'
# ./spec/requests/user_pages_spec.rb:60:in `block (3 levels) in <top (required)>'
這裏是我的測試文件:
describe "profile page" do
let(:user) { FactoryGirl.create(:user) }
let!(:m1) { FactoryGirl.create(:micropost, user: user, content: "Foo") }
let!(:m2) { FactoryGirl.create(:micropost, user: user, content: "Bar") }
before { visit user_path(user) }
it { should have_selector('h1', text: user.name) }
it { should have_selector('title', text: user.name) }
describe "microposts" do
it { should have_content(m1.content) }
it { should have_content(m2.content) }
it { should have_content(user.microposts.count) }
end
end
我確實有微柱法在我的用戶模型:
has_many :microposts, dependent: :destroy
,這裏是我的用戶展示視圖中添加代碼:
<% if current_user?(@user) %>
<section>
<%= render 'shared/micropost_form' %>
</section>
<% end %>
我還添加變量show動作在UserController中的@microposts:
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
@micropost = current_user.microposts.build
end
所以當一切在開發和生產中似乎工作得很好,我不明白爲什麼我的測試不會通過...他們通過之前我在用戶配置文件頁面中添加微博表單...
如果有人能解釋問題所在,我將非常感謝幫助!
修好了!非常感謝 :) –