Когда инициируется действие POST CREATE, ожидайте, что соответствующее действие будет содержать соответствующий атрибут
проблема
Я не уверен, как проверить этот общий шаблон в rspec:
Когда действие контроллера X запущено, убедитесь, что атрибут Y является конкретным значением для объекта Z
контекст
Использование public_activity для отслеживания того, когда пользователи голосуют, меняют голос, пишут новые предложения и т. Д. В приложении.
Это отслеживание инициируется ТОЛЬКО действиями контроллера, касающимися голосования и предложений. Таким образом, вы не можете самостоятельно протестировать отслеживание активности на модели голосования и предложения.
Вы можете увидеть два различных метода отслеживания активности в этом RailsCast http://railscasts.com/episodes/406-public-activity
Я могу легко проверить, изменяется ли Activity, когда запускается действие POST CREATE для voice_controller (см. Ниже), но я застрял в структурировании, чтобы проверить, является ли последнее Activity (PublicActivity::Activity.last
например) записывает пользовательский атрибут.
describe 'POST creates' do
context 'current user has no other vote in the proposal tree' do
it 'creates a new vote' do
expect {
post :create, vote: { proposal_id: proposal1.id, comment: "Coz it rocks!"}
}.to change(Vote, :count).by(1)
end
it "increases the Activity count by 1" do
expect {
post :create, vote: { proposal_id: proposal1.id, comment: "Coz it rocks!"}
}.to change(PublicActivity::Activity, :count).by(1)
end
end
В моей голове это было бы что-то вроде этого
it "Activity tracks the id of who needs to be notified of the vote" do
post :create, vote: { proposal_id: proposal1.id, comment: "Coz it rocks!"}
expect { PublicActivity::Activity.last.notify_list[0] }.to eq user2.id
end
Может ли кто-нибудь предложить подходящий шаблон / синтаксис для попытки зафиксировать это в тесте rspec?
РЕДАКТИРОВАТЬ:
Я также думал о реализации этого в качестве тестов на модели деятельности.
Таким образом, я бы эффективно воссоздал логику из контроллера. Во многом это потребовало бы настройки как минимум двух пользователей, предложения (связанного с user1), голосования (связанного с user2), а затем проверки того, что голосование от user2 создает объект Activity, который включает идентификатор пользователя user1 в свой notify_list
@vote.create_activity :voted, owner: user2, notify_list: create_notify_list(@vote, user2)