Rspec musta AttributeDoesNotExistError
У меня есть модель клиентов, которая была привязана к пользователям, и все тесты прошли успешно. Позже я понял, что клиентам не нужно будет входить в систему, поэтому я удалил ассоциацию. я добавил f_name
а также l_name
колонны. Когда я бегу должен матч validates_presence_of
для f_name
столбец, я получаю ошибку...
Shoulda::Matchers::ActiveModel::AllowValueMatcher::AttributeDoesNotExistError:
The matcher attempted to set :f_name on the Client to nil, but that attribute does not exist.
Я использую атрибут в приложении, и он существует. Я могу заполнить базу данных начальным файлом и использовать его в приложении.
Я удалил базу данных и воссоздал ее вместе с db:test:prepare
думая, что, возможно, схема тестовой базы данных не изменилась.
С чего бы мне эта проблема?
rails_helper.rb
require 'spec_helper'
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
require 'shoulda/matchers'
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
RSpec.configure do |config|
config.include Devise::Test::ControllerHelpers, type: :controller
config.include(Shoulda::Matchers::ActiveModel, type: :model)
config.include(Shoulda::Matchers::ActiveRecord, type: :model)
end
schema.rb
create_table "clients", force: :cascade do |t|
t.string "f_name"
t.string "m_name"
t.string "l_name"
...
end
client_spec.rb
require "rails_helper"
RSpec.describe Client, type: :model do
it {should validate_presence_of(:f_name)}
it {should validate_presence_of(:l_name)}
...
end
client.rb
class Client < ApplicationRecord
validates_presence_of :f_name, :l_name
...
end
1 ответ
Можете ли вы попробовать что-то вроде этого.
RSpec.describe Client, type: :model do
subject { Client.new(f_name: 'first_name', l_name: 'last_name') }
it { should validate_presence_of(:f_name) }
end