Я пытаюсь заставить RSpec работать с простым приложением с каркасом, начиная с тестов каркаса rspec.
Согласно вики о разработке, я добавил различные записи конфигурации разработки, фабрику для пользователя и администратора, и первое, что я делаю в своем контроллере спецификаций, это login_admin.
Самое странное, однако... все мои спецификации терпят неудачу, ЕСЛИ Я не добавлю следующий оператор сразу после строки it ... do
:
dummy=subject.current_user.inspect
(Со строкой, как показано ниже, спецификации pass. Без этой строки все тесты завершаются неудачно, присваивая значение nil вместо ожидаемого значения. Я только случайно обнаружил, что когда я помещал некоторые операторы puts, чтобы проверить, правильно ли установлен current_user.)
Итак, что это такое действует так, будто этот фиктивный оператор каким-то образом «заставляет» current_user загружаться, обновляться или распознаваться.
Кто-нибудь может объяснить, что происходит, и что я должен делать по-другому, чтобы мне не нужен фиктивный оператор?
#specs/controllers/brokers_controller_spec.rb
describe BrokersController do
login_admin
def valid_attributes
{:name => "Bill", :email => "rspec_broker@example.com", :company => "Example Inc", :community_id => 1}
end
def valid_session
{}
end
describe "GET index" do
it "assigns all brokers as @brokers" do
dummy=subject.current_user.inspect # ALL SPECS FAIL WITHOUT THIS LINE!
broker = Broker.create! valid_attributes
get :index, {}, valid_session
assigns(:brokers).should eq([broker])
end
end
describe "GET show" do
it "assigns the requested broker as @broker" do
dummy=subject.current_user.inspect # ALL SPECS FAIL WITHOUT THIS LINE!
broker = Broker.create! valid_attributes
get :show, {:id => broker.to_param}, valid_session
assigns(:broker).should eq(broker)
end
end
и согласно вики о разработке, вот как я могу войти в систему :user или :admin
#spec/support/controller_macros.rb
module ControllerMacros
def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in Factory.create(:admin) # Using factory girl as an example
end
end
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = Factory.create(:user)
user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module
sign_in user
end
end
end