Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#13 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
rails, ruby
Ambito
databases, testing

Direzione di ricerca

Inizia eseguendo la riproduzione Ruby fornita con ActiveRecord 4.2.7.1, mysql2, DatabaseCleaner e RSpec, quindi confronta gli esempi text_search e like_search con ciascuna modalità di pulizia. Il lavoro è completo quando gli esempi text_search non falliscono più con «nessun record trovato» e il comportamento di pulizia esistente rimane coperto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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
Lingua principale
Ruby
Stelle
76
Fork
76
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di DatabaseCleaner/database_cleaner-active_record

Tutte le issue di DatabaseCleaner/database_cleaner-active_record

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.