Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Wrapping ActiveRecord test causes it to fail (no records found)

Abierto
#13 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
rails, ruby

Línea de trabajo

Empieza ejecutando la reproducción de Ruby proporcionada con ActiveRecord 4.2.7.1, mysql2, DatabaseCleaner y RSpec; después, compara los ejemplos de text_search y like_search con cada modo de limpieza. Se considera terminado cuando los ejemplos de text_search ya no fallan indicando que no se encontraron registros y el comportamiento de limpieza existente sigue estando cubierto.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I created a script to demonstrate this behavior:

#!/usr/bin/env ruby

begin
  require "bundler/inline"
rescue LoadError => e
  $stderr.puts "Bundler version 1.10 or later is required.  Please update your bundler"
  raise e
end

gemfile(true) do
  source "https://rubygems.org"
  gem "activerecord", "4.2.7.1"
  gem "mysql2", "0.4.5"
  gem "database_cleaner", "1.5.3"
  gem "rspec", "3.5.0"
end

require "active_record"
require "rspec"
require "rspec/autorun"
require "database_cleaner"

ActiveRecord::Base.establish_connection(
  adapter: "mysql2",
  username: "root",
  password: "password",
  host: "localhost",
  database: "ft_test"
)
ActiveRecord::Base.connection.recreate_database "ft_test"

ActiveRecord::Schema.define do
  create_table :widgets, force: true do |t|
    t.string "description", limit: 255
  end

  add_index "widgets", ["description"], name: "widgets_description_fts", type: :fulltext
end

class Widget < ActiveRecord::Base
  def self.text_search(query)
    where("MATCH(description) AGAINST(:query)", query: query)
  end

  def self.like_search(query)
    where("description like ?", "%#{query}%")
  end
end

RSpec.configure do |config|
  config.default_formatter = "doc"
  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end
  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end
end

RSpec.describe Widget, type: :model do
  describe ".text_search" do
    after(:all) { Widget.delete_all }
    it "fails when cleaning with start/clean" do
      DatabaseCleaner.start

      text_search_test

      DatabaseCleaner.clean
    end

    it "fails when cleaning with block" do
      DatabaseCleaner.cleaning do
        text_search_test
      end
    end

    it "succeeds with manual cleaning (fails at random, unless it is first or the only test run)" do
      Widget.delete_all

      text_search_test

      Widget.delete_all
    end
  end

  describe ".like_search" do
    it "succeeds when cleaning with start/clean" do
      DatabaseCleaner.start

      like_search_test

      DatabaseCleaner.clean
    end

    it "succeeds when cleaning with block" do
      DatabaseCleaner.cleaning do
        like_search_test
      end
    end

    it "succeeds with manual cleaning" do
      Widget.delete_all

      like_search_test

      Widget.delete_all
    end
  end

  private

  def create_widgets
    Widget.create()
    match = Widget.create(description: "The quick brown fox jumps over the lazy dog")
    Widget.create()

    match
  end

  def text_search_test
    match = create_widgets
    expect(Widget.text_search("fox")).to contain_exactly match
  end

  def like_search_test
    match = create_widgets
    expect(Widget.like_search("fox")).to contain_exactly match
  end
end
Lenguaje dominante
Ruby
Estrellas
76
Forks
76
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de DatabaseCleaner/database_cleaner-active_record

Todos los issues de DatabaseCleaner/database_cleaner-active_record

Issues similares

Más issues de Ruby

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.