En primer lugar: No se puede utilizar el método fixtures
en :all
/:context
/:suite hook
. No intente utilizar accesorios en estos enganches (como post(:my_post)
).
Puede preparar accesorios solo en describir/bloque contextual como Infuse write before.
llamada
fixtures :students, :teachers
no se cargan los datos en base de datos! Solo prepara los métodos de ayuda students
y teachers
. Los registros reclamados se cargan de forma diferida en el momento en que intenta acceder por primera vez. Justo antes de
dan=students(:dan)
Esto cargará los estudiantes y profesores en delete all from table + insert fixtures
manera.
Así que si preparas a algunos estudiantes en el enlace antes (: contexto), ya se habrán ido.
La inserción de registros se realiza solo una vez en el banco de pruebas.
Los registros de los dispositivos no se eliminan al final del conjunto de pruebas. Se eliminan y se vuelven a insertar en el próximo banco de pruebas.
ejemplo:
#students.yml
dan:
name: Dan
paul:
name: Paul
#teachers.yml
snape:
name: Severus
describe Student do
fixtures :students, :teachers
before(:context) do
@james=Student.create!(name: "James")
end
it "have name" do
expect(Student.find(@james.id).to be_present
expect(Student.count).to eq 1
expect(Teacher.count).to eq 0
students(:dan)
expect(Student.find_by_name(@james.name).to be_blank
expect(Student.count).to eq 2
expect(Teacher.count).to eq 1
end
end
#but when fixtures are in DB (after first call), all works as expected (by me)
describe Teacher do
fixtures :teachers #was loade in previous tests
before(:context) do
@james=Student.create!(name: "James")
@thomas=Teacher.create!(name: "Thomas")
end
it "have name" do
expect(Teacher.find(@thomas.id).to be_present
expect(Student.count).to eq 3 # :dan, :paul, @james
expect(Teacher.count).to eq 2 # :snape, @thomas
students(:dan)
expect(Teacher.find_by_name(@thomas.name).to be_present
expect(Student.count).to eq 3
expect(Teacher.count).to eq 2
end
end
todas las expectativas en las pruebas anteriormente pasarán
Si estas pruebas se realizan nuevamente (en la próxima suite) y en este orden, que la expectativa
expect(Student.count).to eq 1
NO se cumplirá! Habrá 3 estudiantes (: dan,: paul y nuevos @james). Todos ellos se eliminarán antes de students(:dan)
y solo: paul y: dan se insertarán de nuevo.
En lugar de artefactos, pruebe [factory_girl] (http://www.fabricationgem.org/) o [fabrication] (http://www.fabricationgem.org/). –