Я не использую Devise, поэтому не могу ответить конкретно, если у Devise есть метод доступа current_user
.
Но мне действительно нравится использовать Pickle , чтобы помочь мне сохранить мои рекомендации. И, возможно, это поможет вам, пока вы не найдете более конкретный способ разработки для достижения того, чего вы хотите.
Given /^the following (.+) records$/ do |factory, table|
table.hashes.each do |hash|
Factory(factory, hash)
# since this is like an all encompassing factory creator, this line to
# create a Pickle references might need a bit more extra work if you want
# to create references for other factory types
# I assume email is unique, else use a unique identifier of some sort
find_model! %{user: "#{hash['email']}"}, {:email => hash['email']}
end
end
Given /^I have already created a (.+) that belongs to #{capture_model}$/ do |factory, name|
model = Factory(factory)
ref = model!(name) # we find that reference here
ref.send(model.class.to_s.downcase.pluralize) << model
end
Это будет читать
Given I have already created a note that belongs to user: "test@email.com"
# I would just change this to
Given I have already created a note
# or
Given a note was created for user: "test@email.com"
Вы I
, так как вы сказали Given I logged in...
, нет необходимости говорить that belongs to user: "test@email.com"
это уже you
.
Не говоря уже о том, что это может привести к путанице при чтении, некоторые люди могут подумать, что вы добавляете заметку пользователю, который, как они теперь могут знать (или понимают), на самом деле является вами.
Хотя вам все еще приходится ссылаться в явном виде (например, пользователь: "Джон Доу"), я думаю, что это плюс. Всегда вызывая конкретные ссылки, все знают, на кого ссылаются, и не возникает вопросов о том, кто что делает, с чем.
Рассол служит нам очень хорошо для этой цели. Единственные проблемные области, которые мы находим, - это вещи, созданные непосредственно через пользовательский интерфейс приложения, что немного затрудняет, чтобы убедиться, что вы создаете правильную ссылку на него.
У Pickle большое количество применений, поэтому обязательно взгляните.
Upate
Вы должны оказаться здесь. Поскольку, как вы и хотели, здесь нет опции current_user
(насколько нам известно). Так что в этом сценарии вы должны найти «актера».
Given /^I have already created a note$/ do
user = model!(%{user: "test@email.com"}) # if using pickle
# user = User.find_by_email("test@email.com") # if just regular AR
user.notes << Note.create
end