Я решил написать некоторые спецификации запроса, в дополнение к моим сценариям огурца. Но не удалось на моем первом примере:Rails request spec не делает запрос на отправку
Так есть этот способ положить в мой goalsController:
def achieve
@goal.update_attribute(:achieved, true)
redirect_to :back
end
И это пример:
# -*- coding: utf-8 -*-
require 'spec_helper'
describe "Achievements" do
before(:all) do
@bob = Factory(:user, :email => "[email protected]", :password => "qweqwe", :password_confirmation => "qweqwe", :money => 500)
@achieve = Factory(:goal, :user => @bob, :title => "Notebook", :price => 100, :achieved => false)
login_user('[email protected]', 'qweqwe')
end
it 'can not be achieved twice' do
visit dashboard_path
put achieve_user_goal_path(@bob, @achieve) #Passes it well
@achieve.reload #same with or without this line
@achieve.achieved.should equal true #Fails
end
end
Таким образом, после поместить запрос «достичь» поле становится истинным , Он отлично работает в моем приложении и на этапе огурца, но не в этом примере rspec. Это похоже на то, что rspec просто игнорирует строку с «put».
Я хочу проверить, что все работает правильно, если пользователь пытается снова запросить эту возможность. Например, если он открыл две одинаковые страницы и пытается нажать «Достичь» на обоих из них. –
Я не понял этого вопроса; насколько я знаю, условия проведения испытаний не очень легки, но если вам не нужны запросы на выполнение одновременно, просто выберите путь и дважды нажмите кнопку. – d11wtq
При следующем посещении этого пути этой кнопки не будет, потому что цель достигнута. Но если ранее пользователь открыл другую страницу, тогда у нее появится эта кнопка, и пользователь снова сможет ее щелкнуть. Мой код уже безопасен для этого поведения (я вставил не весь код из действия #achieve), и я просто хочу проверить его с запросом spec :) –