Jun'uary
Jan'uary » 日志 » Make sure to rebuild index before testing when using ferret
Make sure to rebuild index before testing when using ferret
Jan 发表于 2008-03-04 13:23:02
After beaten the bug in my acts_as_ferret model testcase, I think it's valuable to remind you: remember to do YourModel.rebuild_index before any tests related to ferret!!
Look at this:
it "should be able to delete when no products related to it" do
@brand.products.each do |product|
product.brand = brands(:rollerblade)
product.save
end
lambda {@brand.destroy}.should_not raise_error
lambda {Brand.find(@brand.id)}.should raise_error
end
it "should be searchable" do
Brand.rebuild_index
Brand.find_by_contents("Rollerblade").should have(1).brands
Brand.find_by_contents("good").should have(2).brands
Brand.find_by_contents("Salomon").should have(2).brands
end
In the first testcase, some brand maybe deleted, and acts_as_ferret will regenerate the index for you automatically. When the second testcase is run, although the fixtures will load again, the index has been modified and will NOT be revert to the original state as fixture, so you HAVE TO insert a Brand.rebuild_index line to ensure the index is synchoronized with the data in DB.
(note the running order of testcase is not guranteed by rspec)
Look at this:
it "should be able to delete when no products related to it" do
@brand.products.each do |product|
product.brand = brands(:rollerblade)
product.save
end
lambda {@brand.destroy}.should_not raise_error
lambda {Brand.find(@brand.id)}.should raise_error
end
it "should be searchable" do
Brand.rebuild_index
Brand.find_by_contents("Rollerblade").should have(1).brands
Brand.find_by_contents("good").should have(2).brands
Brand.find_by_contents("Salomon").should have(2).brands
end
In the first testcase, some brand maybe deleted, and acts_as_ferret will regenerate the index for you automatically. When the second testcase is run, although the fixtures will load again, the index has been modified and will NOT be revert to the original state as fixture, so you HAVE TO insert a Brand.rebuild_index line to ensure the index is synchoronized with the data in DB.
(note the running order of testcase is not guranteed by rspec)
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
