Я пытаюсь заставить RSpec работать для простого скаффолдингового приложения, начиная с тестов скаффолдов rspec.
В вики устройства я добавил различные записи конфигурации devise, фабрику для пользователя иадминистратор, и первое, что я делаю в своем контроллере спецификаций, это login_admin.
Самое странное, хотя ... все мои спецификации терпят неудачу, ЕСЛИ Я не добавлю следующее утверждение сразу после строки it ... do
:
dummy=subject.current_user.inspect
(Со строкой, как показано ниже, спецификации проходят. Без этой строки все тесты завершаются неудачно с присваиванием nil вместо ожидаемого значения. Я только случайно обнаружил, что когда я помещал некоторые операторы putчтобы проверить, правильно ли был установлен 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
, и в соответствии с разработанной вики здеськак я могу войти в систему: пользователь или: 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