我编写了以下rspec
功能,以检查输入的值是否等于零或否定:
require 'rails_helper'
RSpec.feature 'Users can create new credits' do
before do
visit credits_url
click_link 'New Credit'
end
scenario 'with zero value' do
fill_in 'Amount', with: 0.00
click_button 'Create Credit'
expect(page).to have_content 'Credit has not been created.'
end
scenario 'with negative value' do
fill_in 'Amount', with: -100.00
click_button 'Create Credit'
expect(page).to have_content 'Credit has not been created.'
end
end
我认为,要通过此测试,我需要为此编写helpers/credit_helper.rb
,但无法确定从哪里开始。
也许我对帮助者有误?
答案 0 :(得分:0)
通过使用以下模型credit.rb
来解决问题:
class Credit < ActiveRecord::Base
validates :amount, presence: true, numericality: { greater_than_or_equal_to: 1 }
end
答案 1 :(得分:-1)
嗯,这是一种完全未经测试的方法。
controller:
def create
@payment = Payment.new(payment_params)
amount=@payment(params[:amount])
if (amount > 0)
payment.save
else
flash[:error] = 'Credit has not been created.'
end
end
这只是一种方法的想法。您必须使用以下内容将Flash错误呈现给页面:
<% if flash[:error] -%>
<p ><%=h flash[:error] %></p>
<% end -%>
这不会阻止用户输入少于1的金额,只是测试它,并且还没有创建“信用”。&#39;看起来你的测试正在寻找的内容。如果您想要预防它,那么正如我所说,您可以直接在表单上进行某种验证。