Hopp til innholdet

cjohansen.no

Testdata under utvikling i Rails

For å få et riktig bilde av applikasjonen i levende live mens man utvikler er det nødvendig med en viss mengde testdata. Følgende er to måter å "så" data i utviklings-basen.

Enhetstester og manuell testing

Enhetstester tar selvfølgelig mye av ansvaret for å sjekke at diverse deler av koden gjør som den skal. Alikevel er det et behov for faktisk se at ting funker med egne øyne med litt data. Først når du får en del - og ikke minst variert - data vil du kunne verifisere at designet holder som det skal, og det hele fungerer sammen.

Hent inn testdata

Dersom du er ivrig på å skrive enhetstester for koden din har du antageligvis allerede noen fixtures liggende. Disse kan ofte fungere fint som testdata i utviklingsmiljøet også. Heldigvis finnes det en rake-oppgave for å laste testfiksene inn i utviklingsdatabasen:

rake db:fixtures:load

Egne fixtures for utvikling

På sin blogg, Quoted Printable viser Jeffrey Allan Hardy hvordan man kan ha egne fixtures for utvikling og en tilhørende rake-oppgave for å laste de inn.

Opprett filen lib/tasks/seed.rake og fyll den med:

namespace :db do
  desc "Load seed fixtures (from db/fixtures) into the current environment's database." 
  task :seed => :environment do
    require 'active_record/fixtures'
    Dir.glob(RAILS_ROOT + '/db/fixtures/*.yml').each do |file|
      Fixtures.create_fixtures('db/fixtures', File.basename(file, '.*'))
    end
  end
end

Deretter kan du lage fixtures på samme måte som du gjør til enhetstester under db/fixtures/ (eller andre steder om du ønsker, oppdater i så fall rake-oppgaven), og hente de inn etter en fersk migrasjon med rake db:seed.

Dette er en veldig nyttig løsning dersom du trenger mye testdata i utviklingsmiljøet, men ikke er like avhengig av det i enhetstestene dine. Ved å flytte store mengder ut av testfiksene vil du spare tid når du kjører testene. Fixtures (norsk ord, noen?) er også en veldig smart måte å få store mengder testdata inn i basen fordi du kan skrive Ruby-kode for å generere tilfeldig data.

Happy seeding!

Muligens relatert

2006 - 2012 Christian Johansen Creative Commons Lisens