NoMethodError: неопределенный метод `users 'в настройке - PullRequest
1 голос
/ 26 января 2020

возможно это глупый вопрос, но у меня возникла проблема, когда я пытаюсь запустить тест на Ruby, это ошибка:

Ошибка: UsersLoginTest # test_login_with_valid_information:

NoMethodError: неопределенный метод User' for #<UsersLoginTest:0x0000555ef3ec15b0> Did you mean? super test/integration/users_login_test.rb:6:in setup '

Я пытался исправить фикстуру .yml, но я не уверен, что проблема больше там.

Это my users.yml

michael:
  name: Michael Example
  email: michael@example.com
  password_digest: <%= User.digest('password') %>

это мой users_login_test.rb

require 'test_helper'

class UsersLoginTest < ActionDispatch::IntegrationTest

  def setup
    @user = users(:michael)
  end

  test "login with valid information" do
    get login_path
    post login_path, params: { session: { email:    @user.email,
                                          password: 'password' } }
    assert_redirected_to @user
    follow_redirect!
    assert_template 'users/show'
    assert_select "a[href=?]", login_path, count: 0
    assert_select "a[href=?]", logout_path
    assert_select "a[href=?]", user_path(@user)
  end
end

и это мой test_helper.rb

ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
require 'rails/test_help'

class UserTest < ActiveSupport::TestCase
  fixtures :all
  include ApplicationHelper

  setup do
    @user = User.new(name: "Example User", email: "user@example.com",
                     password: "foobar", password_confirmation: "foobar")
  end
  test "should be valid" do
    assert @user.valid?
  end

end

где может быть проблема? большое спасибо за вашу помощь

Новые вложения

irb (основной): 002: 0> User.column_names

=> ["id "," name "," email "," creation_at "," updated_at "," password_digest "]

Я попытался изменить password_digest: 123456, но выдает ту же ошибку. Я попытался изменить на пароль: test_password, и это происходит:

UserTest # test_should_be_valid:

ActiveRecord :: Fixture :: FixtureError: таблица "users" не имеет столбцов с именем "password ".

Также я прикрепляю свой gem-файл, где единственным файлом, который я намеренно использовал для аутентификации, был gem 'bcrypt'. Я думаю:

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.3'


gem 'rails', '6.0.1'
gem 'autoprefixer-rails', '9.6.1.1'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '5.0.0'
gem 'jquery-rails', '4.3.5'
gem 'mini_magick', '4.9.5'
gem 'will_paginate', '3.2.1'
gem 'bootstrap-will_paginate', '1.0.0'
gem 'bootstrap-sass', '3.4.1'
gem 'puma', '4.3.1'
gem 'font-awesome-rails', '4.7.0.5'
gem 'sass-rails', '6'
gem 'webpacker', '4.0'
gem 'turbolinks', '5'
gem 'jbuilder', '2.9.1'
gem 'rubocop', '0.77.0'
gem 'bootsnap', '1.4.2', require: false
gem 'rails-controller-testing'
gem 'bcrypt',         '3.1.12'

group :development, :test do
  gem 'sqlite3', '1.4.1'
  gem 'byebug', platforms: %i[mri mingw x64_mingw]
end

group :development do
  gem 'web-console', '3.3.0'
  gem 'listen', '3.2.0'
  gem 'spring'
  gem 'spring-watcher-listen', '2.0.0'
end

group :test do
  gem 'capybara',           '3.28.0'
  gem 'selenium-webdriver', '3.142.4'
  gem 'webdrivers',         '4.1.2'
end

group :production do
  gem 'pg',  '0.20.0'
  # gem 'fog', '1.42'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

И на всякий случай я создал хранилище: https://github.com/cochabambinoski/Share-Exercise

1 Ответ

1 голос
/ 26 января 2020

Хорошо, ваша проблема в том, что вы настроили test_helper.rb как сам тест, и это вызывает у вас проблемы. Ваш файл должен выглядеть следующим образом:

#test_helper.rb
ENV['RAILS_ENV'] = 'test'
require_relative '../config/environment'
require 'rails/test_help'

class ActiveSupport::TestCase #you were creating a new class in your code
  fixtures :all
  include ApplicationHelper

end

Вот и все, все, что мне нужно было сделать после клонирования вашего репозитория, это выполнить пакетную установку и выполнить rake db:create и rake db:test:prepare. Сейчас тест проходит. Не забудьте изменить свой прибор на:

michael:
  name: Michael Example
  email: michael@example.com
  password_digest: <%= User.digest('password') %>

Большой урок здесь test_helper.rb - это место для некоторых настроек и настроек, а не место для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...