Все,
У меня проблемы с тестированием модели, у меня есть простая таблица клиентов, в которой используются следующие поля: имя: строка, местоположение: строка, полное_имя: строка, актив: логическое значение. Я использую поле full_name как скрытое поле, содержащее следующее «#{имя} #{местоположение}», и проверяю запись на уникальность в поле full_name.
Тест «клиент недействителен без уникального полного имени» — это тест, с которым у меня возникла проблема, я пытаюсь проверить вставку дублирующей записи. Если я удалю челку (!) перед утверждением !customer.save, тест будет пройден. это действует так, как будто приборы не загружаются в таблицу до запуска теста, я запускаю rake test:units. Я попытался запустить сервер в режиме разработки и вставил две записи с использованием строительных лесов, а вторая вставка завершилась неудачно и сообщила об ошибке «Полное имя уже занято», что является ожидаемым поведением.
кто-нибудь может подсказать, где я напортачил с тестом!
заранее спасибо
Возврат
Модель:
class Customer < ActiveRecord::Base
attr_accessible :active, :full_name, :location, :name
validates :active, :location, :name, presence: true
validates :full_name, uniqueness: true # case I am trying to test
before_validation :build_full_name
def build_full_name
self.full_name = "#{name} #{location}"
end
end
Тестовое приспособление customers.yml
one:
name: MyString
location: MyString
full_name: MyString
active: false
two:
name: MyString
location: MyString
full_name: MyString
active: false
general:
name: 'Whoever'
location: 'Any Where'
full_name: ''
active: true
Помощники по тестовым модулям customer_test.rb
require 'test_helper'
class CustomerTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
fixtures :customers
# Test fields have to be present
test "customer fields must not be empty" do
customer = Customer.new
assert customer.invalid?
assert customer.errors[:name].any?
assert customer.errors[:location].any?
assert_equal " ", customer.full_name # This is processed by a helper function in the model
assert customer.errors[:active].any?
end
# Test full_name field is unique
test "customer is not valid without a unique full_name" do
customer = Customer.new(
name: customers(:general).name,
location: customers(:general).location,
full_name: customers(:general).full_name,
active: customers(:general).active
)
assert !customer.save # this is the line that fails
assert_equal "has already been taken", customer.errors[:full_name].join(', ')
end
end