Pertanyaan Cara memuat kembali kelas ruby


Di banyak kelas kami, kami melakukan cache pengoperasian yang mahal untuk kinerja. misalnya

def self.foo
    @foo ||= get_foo
end 

Ini berfungsi baik dalam aplikasi, namun pengujian (RSpec) gagal karena variabel yang di -arsipkan ini. Nilai-nilai dari tes pertama dikembalikan dalam tes berikutnya, ketika kita mengharapkan nilai-nilai segar.

Jadi pertanyaannya adalah: bagaimana cara memuat ulang kelas? Atau hapus semua variabel yang di-memo?


5
2017-07-13 01:47


asal


Jawaban:


Buat kelas dan tes Anda sedemikian rupa sehingga data yang di-cache tetap benar atau terhapus bila tidak valid. Pertimbangkan untuk menambahkan metode untuk menghapus cache dan memanggilnya dalam rspec before blok.


3
2017-07-13 02:13



Tambahkan sebuah after (atau before) blok ke grup contoh untuk menghapus variabel instan (dengan asumsi objek yang dimaksud adalah subjek):

after do
  subject.instance_variable_set(:@foo, nil)
end

Atau memperbaiki masalah. Memiliki variabel instance kelas yang dimonotasikan adalah sedikit bau karena tidak akan pernah berubah. Variabel instan yang normal tidak akan memiliki masalah ini karena Anda akan membuat objek baru untuk setiap pengujian.


7
2017-07-13 02:10