Rspec musta AttributeDoesNotExistError - PullRequest
       68

Rspec musta AttributeDoesNotExistError

0 голосов
/ 19 сентября 2018

У меня есть модель клиентов, которая была привязана к пользователям, и все тесты прошли успешно.Позже я понял, что клиентам не нужно будет входить в систему, поэтому я удалил ассоциацию.Я добавил f_name и l_name столбцы.Когда я запускаю musta matcher 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 Ответ

0 голосов
/ 19 сентября 2018

Можете ли вы попробовать что-то вроде этого.

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
...