Когда инициируется действие 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)

0 ответов

Другие вопросы по тегам