Я учусь писать технические характеристики, используя rspec и capybara.Я пытаюсь написать спецификацию для приложения, которое обрабатывает транзакции.Мой контроллер транзакций выглядит следующим образом:
def new
@transaction = Transaction.new
end
def create
transaction = Transaction.new(transaction_params)
transaction.account = current_account
if transaction.save && transaction.account.save
flash[:success] = 'Transaction successfull'
else
flash[:danger] = 'Insufficient balance'
end
redirect_to root_path
end
Это выглядит следующим образом транзакции / новые:
<div class = 'row'>
<div class = 'col-xs-12'>
<%= form_for(@transaction, id: 'transaction_form', :html => {class: 'form-horizontal', role: 'form'}) do |t| %>
<div class = 'form-group'>
<div class = 'control-label col-sm-2'>
<%= t.label :amount %>
</div>
<div class = 'col-sm-8'>
<%= t.text_field :amount, class: 'form-control', placeholder: 'Enter amount', autofocus: true %>
</div>
</div>
<div class = 'form-group'>
<div class = 'control-label col-sm-2'>
<%= t.label :transaction_type %>
</div>
<div class = 'col-sm-8'>
<%= t.select :transaction_type, Transaction.transaction_types.keys %>
</div>
</div>
<div class = 'form-group'>
<div class = 'col-sm-offset-2 col-sm-10'>
<%= t.submit 'Submit', class: 'btn btn-primary btn' %>
</div>
</div>
<% end %>
Я добавил id: transaction_form
, чтобы сформировать, чтобы избежать неоднозначной ошибки.Код спецификации выглядит следующим образом:
RSpec.feature 'Transactions', type: :feature do
context 'create new transaction' do
scenario 'should be successfull' do
visit new_transaction_path
within('#transaction_form') do
fill_in 'Amount', with: '60'
end
click_button 'Submit'
expect(page).to have_content('Transaction successfull')
end
end
end
При запуске этой спецификации, однако, я получаю сообщение об ошибке:
1) Transactions create new transaction should be successfull
Failure/Error:
within('#transaction_form') do
fill_in 'Amount', with: '60'
end
Capybara::ElementNotFound:
Unable to find css "#transaction_form"
Чего мне не хватает?Если я использую form
напрямую, он выдает неоднозначную ошибку, поскольку получает один и тот же элемент из другого файла.Что не так с этим кодом?
Кроме того, страница / Transactions / new будет отображаться, только если пользователь вошел в систему. Так это также повлияет на спецификацию транзакции?Если да, то что должно быть сделано?
Пожалуйста, помогите.Заранее спасибо.