Проверка за нулеви или отрицателни стойности в помощниците?

Написах следната функция 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 за това, но не мога да разбера откъде да започна.

Може би греша по отношение на помощниците?


person Askar    schedule 27.09.2015    source източник
comment
добре, вече се нуждаете от rails_helper, защо не напишете проста функция в него, която приема число или вход (нека го наречем num) и връща num === 0 || num > 0, което ще върне true, ако случаят е такъв, и false в противен случай? след това в теста настройте условие, което изпълнява кода, който имате, ако връщането от помощния метод е вярно. ИЛИ можете просто да настроите това условно if num == 0 || num > 0 точно там в теста. просто мисъл.   -  person HolyMoly    schedule 27.09.2015
comment
@HolyMoly Мисля, че това, което обясни, може да се отнася само за тестовата страна и няма ли да мога да добавя 0 или отрицателни стойности в самото приложение?   -  person Askar    schedule 27.09.2015
comment
това е вярно, но си помислих, че просто тествате, за да видите дали е въведена стойност, равна или по-малка от нула. от страна на клиента вероятно можете да добавите известно валидиране в самия формуляр, ако искате да предотвратите число, по-малко от 1   -  person HolyMoly    schedule 27.09.2015
comment
Създавам приложение, използвайки първия подход TDD/BDD. Бих искал да имам няколко ясни примера как да реша проблема.   -  person Askar    schedule 27.09.2015


Отговори (2)


Проблемът е решен със следния модел credit.rb:

class Credit < ActiveRecord::Base
  validates :amount, presence: true, numericality: { greater_than_or_equal_to: 1 }
end

Справка: https://stackoverflow.com/a/26257029/1745902

person Askar    schedule 27.09.2015

Ето един подход, напълно непроверен.

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

Това е само идея за подход. Ще трябва да изобразите флаш грешката на страницата, като използвате нещо като:

<% if flash[:error] -%>
  <p ><%=h flash[:error] %></p>
<% end -%>

Това няма да попречи на потребителя да въведе сума, по-малка от 1, той просто я тества и изобразява „Кредитът не е създаден“. съдържание, което изглежда, че вашият тест търси. Ако искате да го ПРЕДОТВРАТИТЕ, тогава, както казах, можете да направите някакво валидиране директно във формуляра.

person HolyMoly    schedule 27.09.2015