O que é uma fixture clássica do Rails, e por que este app não tem nenhuma
Os comentários de documentação do Rails, citados
O active_record/fixtures.rb, instalado com o Rails 8.1.3.1 deste app, abre com uma definição: "Fixtures are a way of organizing data that you want to test against; in short, sample data." São YAML puro, um arquivo por model, em test/fixtures/, a convenção do Minitest:
rubyonrails:
id: 1
name: Ruby on Rails
url: http://www.rubyonrails.org
google:
id: 2
name: Google
url: http://www.google.com
"The testing environment will automatically load all the fixtures into the database before each test," continua o comentário. "To ensure consistent data, the environment deletes the fixtures before running the load." Todo teste começa das mesmas duas linhas, rubyonrails e google. O Rails devolve cada uma por um método com o nome do arquivo: web_sites(:rubyonrails).name, do mesmo comentário de documentação.
Este app não tem nenhuma
find spec/fixtures -type f
# => spec/fixtures/files/test_image.png
Esse único arquivo é uma imagem para testar anexos, não uma fixture de dados YAML no sentido do comentário. Não existe arquivo no estilo web_sites.yml em lugar nenhum deste app, e também não há diretório test/. Este app se comprometeu com o RSpec em spec/, sem Minitest e sem fixtures clássicas. Os dois fatos foram checados no disco.
Uma armadilha de ordem que o comentário avisa
O mesmo código diz: "Fixtures by default are unordered... You will need ordered fixtures when you have foreign key constraints on keys in the same table". A solução dele é o tipo YAML !omap, que garante que uma linha pai carregue antes da linha filha que a referencia. Um arquivo de fixture YAML não tem noção de "esta linha precisa daquela existir antes". Só há um valor id: cru, que o autor escolhe e mantém em sincronia à mão. A solução recomendada pelo comentário é marcação, não código.
Por que isso importa antes das próximas seis aulas
A escolha deste app são factories, e o factory_bot_rails está no Gemfile. O spec/factories/ guarda 18 arquivos com 21 declarações factory :name nos namespaces catalog, identity, enrollment, execution, partners e community. Alguns arquivos definem mais de uma factory, entre eles quizzes.rb e lesson_notes.rb. Factories não são o único jeito de escrever dados de teste. São uma escolha deliberada contra uma alternativa bem documentada, a que esta aula acabou de citar do código do Rails. As próximas aulas mostram como essa escolha aparece no código deste app: a DSL factory :name do ... end, traits, a divisão create/build/build_stubbed e associações montadas na hora em vez de ids escolhidos à mão.
O que este curso cobre
Sete aulas, checadas contra os arquivos de spec/factories/ deste app e o código-fonte instalado do FactoryBot. Esta aula mostra o que é uma fixture YAML, e que este app não tem nenhuma. A aula 2 trata da DSL factory: atributos e sequence. A aula 3 trata de traits, incluindo uma descoberta surpreendente sobre a origem de muitas traits deste app. A aula 4 trata de create, build, build_stubbed e attributes_for, com a frequência de cada um na suíte deste app. A aula 5 trata de associações, e do que é salvo quando uma factory referencia outra. A aula 6 pesa a troca e mostra por que as factories venceram aqui. A aula 7 fecha com um desafio: um pequeno montador de objetos com sequências, em Ruby puro.
Continue com a aula 2
A DSL de factory: atributos e sequence, checados nos arquivos deste app
Lê a factory de usuário para explicar blocos de atributo, contadores de sequence e sobrescritas na chamada.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.