0
특히 has_content 메소드를 사용하여 내 rspec 테스트에 문제점이 있습니다. 다음은 일부 코드 스 니펫입니다. 나는 당신이 모를 경우에 대비하여 Michael Hartl의 Ruby on Rails 튜토리얼을 따라 왔습니다.#has_content? (String) 항상 false를 반환합니다.
마이크로 포스트가 각각의 내용을 설정하더라도 has_content는 항상 false를 반환합니다.
얻어진 시험
Run options: include {:line_numbers=>[61]}
..FFF
Failures:
1) User pages profile page microposts should have content 0
Failure/Error: it { should have_content(user.microposts.count) }
expected #has_content?(0) to return true, got false
# ./spec/requests/user_pages_spec.rb:72:in `block (4 levels) in <top (required)>'
2) User pages profile page microposts should have content "Foo Bar"
Failure/Error: it { should have_content(m2.content) }
expected #has_content?("Foo Bar") to return true, got false
# ./spec/requests/user_pages_spec.rb:71:in `block (4 levels) in <top (required)>'
3) User pages profile page microposts should have content "Lorem Ipsum"
Failure/Error: it { should have_content(m1.content) }
expected #has_content?("Lorem Ipsum") to return true, got false
# ./spec/requests/user_pages_spec.rb:70:in `block (4 levels) in <top (required)>'
Finished in 0.74407 seconds
5 examples, 3 failures
Failed examples:
rspec ./spec/requests/user_pages_spec.rb:72 # User pages profile page microposts should have content 0
rspec ./spec/requests/user_pages_spec.rb:71 # User pages profile page microposts should have content "Foo Bar"
rspec ./spec/requests/user_pages_spec.rb:70 # User pages profile page microposts should have content "Lorem Ipsum"
Randomized with seed 43497
[Finished in 1.3s with exit code 1]
user_pages_spec.rb
describe "profile page" do
let(:user) { FactoryGirl.create(:user) }
let(:m1) { FactoryGirl.create(:micropost, user: user, content: "Lorem Ipsum") }
let(:m2) { FactoryGirl.create(:micropost, user: user, content: "Foo Bar") }
before { visit user_path(user) }
it { should have_selector('h1', text: user.name) }
it { should have_title(full_title(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
show.hml.erb
<% provide(:title, @user.name) %>
<div class='row'>
<aside class='col-md-4'>
<section>
<h1>
<%= gravatar_for @user, size: 50 %>
<%= @user.name %>
</h1>
</section>
</aside>
<div class="col-md-8">
<% if @user.microposts.any? %>
<h3>Microposts (<%= @user.microposts.count %>)</h3>.
<ol class="microposts">
<%= render @microposts %>
</ol>
<% end %>
</div>
</div>
_micropost.html.erb
<li>
<span class="content">
<%= micropost.content %>
</span>
<span class="timestamp">
Posted <%= time_ago_in_words(micropost.created_at) %>
</span>
</li>
012,351,
micropost.erb
class Micropost < ActiveRecord::Base
attr_accessible :content
belongs_to :user
validates :user_id, presence: true
validates :content, presence: true, length: { maximum: 140 }
default_scope { order('microposts.created_at DESC') }
end
user.rb
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
has_many :microposts, dependent: :destroy
# remaning lines are for validation
end
=== EDIT (문제에 대한 답) ===
나는하게 사용! 대신에 각 예제 앞에 메소드의 호출을 강제 실행합니다.
let!(:m1) { FactoryGirl.create(:micropost, user: user, content: "Lorem Ipsum") }
let!(:m2) { FactoryGirl.create(:micropost, user: user, content: "Foo Bar") }
답변을 주셔서 감사합니다. 대신에 각 예제 앞에 메소드의 호출을 강제 실행합니다. 네가 네 대답을 한 후에 나는 그것을 깨달았다. – oLraX