我想知道第11章中的這個方法'be_following'從哪裏來?這裏是user_spec的片段:Michael Hartl的RoR教程第11章中的Rspec方法'be_following'關注用戶
describe "following" do
it { should be_following(other_user) }
its(:followed_users) { should include(other_user) }
describe "followed user" do
subject { other_user }
its(:followers) { should include(@user) }
end
end
我不明白這個方法是如何創建的。據我所知它不是默認的rspec或水豚方法。我甚至不確定在rspec中是否可以在定義模型關係時使用rails生成的方法,例如has_many和belongs_to。是這樣嗎?爲什麼在這種情況下,當模型中甚至沒有定義該方法時,該方法就是如此。這裏是用戶模型:
has_many :years
has_many :relationships, dependent: :destroy, foreign_key: :follower_id
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id",
class_name: "Relationship",
dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower
def User.new_remember_token
SecureRandom.urlsafe_base64
end
def User.encrypt(token)
Digest::SHA1.hexdigest(token.to_s)
end
def following?(followed)
relationships.find_by_followed_id(followed)
end
def follow!(followed)
relationships.create!(:followed_id => followed.id)
end
def unfollow!(other_user)
relationships.find_by(followed_id: other_user.id).destroy!
end
」如果您需要將參數傳遞給方法,則同樣的作品。「你能舉一個這樣的例子嗎? – natecraft1
此外,我想知道這個謂詞方法是否需要使用「?」編寫一個方法最後。這個鏈接http://rspec.rubyforge.org/rspec/1.1.11/classes/Spec/Matchers.html說你需要一個自定義匹配器的類嗎? – natecraft1
我已經在答案中添加了一些示例 – faron