Testing with Django, Haystack and Whoosh

The problem: you want to test a Django view for results of a search query, but Haystack will be using your real query index, built from your real database, instead of an index built from your test fixtures.

Turns out you can generalise this for any Haystack back-end by replacing the haystack.backend module with the simple back-end.

from myapp.models import MyModel
from django.test import TestCase
import haystack

class SearchViewTests(TestCase):
    fixtures = ['test-data.json']

    def setUp(self):
        self._haystack_backend = haystack.backend
        haystack.backend = haystack.load_backend('simple')

    def tearDown(self):
        haystack.backend = self._haystack_backend

    def test_search(self):
        results = SearchQuerySet().all()
        assert results.count() == MyModel.objects.count()

My first attempt at this made changes to the project settings and did HAYSTACK_WHOOSH_STORAGE = "ram" which works but was complicated because then you have to re-build the index with the fixtures loaded, except the fixtures don’t get loaded in TestCase.setUpClass, so the choice was to load the fixtures myself or to re-index for each test. And it was specific to the Whoosh back-end of course.

(This is for Django 1.4 and Haystack 1.2.7. In my actual project I get to deploy on Python 2.5. Ain’t I lucky? On a fucking PowerMac G5 running OS X Server 10.5 for fuck sacks.)

34 thoughts on “Testing with Django, Haystack and Whoosh

  1. Alex

    So if I understand this correctly, the simple backend queries / updates the database instead of the Solr index. This allows you to run queries / updates that would normally hit Solr without touching it. So you can’t really test the querying / updating that Haystack does (and you don’t need to in your app’s unit test) and you receive “real” results based on what is in the database which in the case of django tests, is a temp database created for testing so nothing permanently changes.

    Is everything I said correct?

  2. david Post author

    Hi @Alex,

    Yes, you got it.

    The simple backend doesn’t use Solr (or whatever other proper backend you configure Haystack to use in production); instead it just does plain SQL queries using the Django ORM, which implies Haystack doesn’t actually do updates to its own search indexes when using the simple backend.

    (I’m assuming this is still true: I haven’t checked if current versions of Haystack have changed the behaviour of the simple backend since I wrote this post in December 2012.)

  3. Sébastien Brochet

    Hi,

    As of version 2.x of Haystack, you’re no more able to modify the backend with the “backend” attribute. You can however get the same result with this code:

    from haystack.utils import loading from haystack import connections haystack.connections = loading.ConnectionHandler({ 'default': { 'ENGINE': 'haystack.backends.simple_backend.SimpleEngine' } })

    Small issue is that haystack.backends.simple_backend.SimpleEngine doesn’t support advanced filtering and if you make use of it you need another solution. Based on your experimentations with Whoosh backend, I was able to configured it and get the right results when doing filtering:

    HAYSTACK_WHOOSH_STORAGE = 'ram' HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

    from haystack.utils import loading from haystack import connections haystack.connections = loading.ConnectionHandler({ 'default': { 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine' } })

    As I don’t make use of fixtures (yet), it does the job.

  4. Sébastien Brochet

    My bad, the method I’ve described in my previous comment doesn’t work. I was using my local file-based Whoosh index created during normal runs.

    It seems also that HAYSTACK_WHOOSH_STORAGE is no more supported in Haystack 2.x

    To make my unittest, I’ve cleared my Whoosh index:

    python manage.py clear_index

    And forced the real-time signal processor:

    HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

    Now, all my tests are OK :-)

  5. Centranz.Com

    This is a good tip especially to those new to the blogosphere.

    Brief but very precise information… Thank you for sharing this one.

    A must read post!

  6. vidics

    Its not my first time to visit this web page, i am visiting this site dailly and get good facts from here every day.

  7. Tilly

    Idealny wpis, generalnie się z Tobą zgadzam, chociaż w niektórych aspektach bym polemizowała. Na pewno Twój blog zasługuje na szacunek. Jestem pewna, że tu jeszcze wpadnę.

  8. Jessie

    We are a bunch of volunteers and starting a new scheme in our community. Your website offered us with valuable info to work on. You’ve done a formidable job and our entire neighborhood will be thankful to you.

  9. BestLorene

    I see you don’t monetize buxty.com, don’t waste your traffic, you can earn extra bucks every month with new monetization method. This is the best adsense alternative for any type of website (they approve all sites), for more info simply search in gooogle: murgrabia’s tools

  10. สมัครเกมยิงปลา

    สมัคร เกมยิงปลาผ่านมือถือ กับ ยูฟ่าเบท รับโปรโมชั่นจัดเต็ม Ufabet เว็บ เกมยิงปลาได้เงินจริง และก็ คาสิโนออนไลน์ ที่ได้รับความนิยมของคนประเทศไทยนั้น ก็เป็นอีกหนึ่งเว็บที่ในขณะนี้ผู้คนจำนวนมากก็เอ่ยถึงกันจำนวนมากเลยครับ โดยเว็บไซต์ของเรานั้นก็มีเกมส์คาสิโนต่างๆให้ลูกค้านั้นสามารถที่จะเลือกเล่นได้อย่างจำนวนมากเลยนั่นเอง แถมผู้ใดกันที่ได้มา สมัครเกมยิงปลาผ่านมือถือกับเรานั้นก็รับโบนัสแล้วก็โปรโมชั่นที่แตกต่างจากเว็บไซต์อื่นแน่ๆ ยิ่งกว่านั้นในเว็บไซต์ของเรานั้นก็จะมีเกมส์ต่างๆให้ลูกค้าได้เลือกเล่นกันอย่างเยอะแยะอีกด้วย ทำให้ทุกคนที่เข้ามาเป็นสมาชิกกับ ยูฟ่าเบทนั้นก็ชอบพอกันเป็นอันมากนั่นเอง

    ทุกๆวันนี้นั้นการ เกมยิงปลาได้เงินจริง ถือเป็นเรื่องที่ปกติไปแล้วนะครับ หลายคนก็เริ่มที่จะสนใจให้กับการเล่นการเดิมพันออนไลน์กันมากเหมือนกัน เพราะว่าเป็นการเล่นที่สนุก ได้เสี่ยงดวง ได้เงินดี ได้เงินจริง โดยครั้งก่อนนั้นการเล่นการเดิมพันออนไลน์หลายๆคนก็โดนโกงกันเยอะแยะเช่นกันครับผมทำให้ไม่กล้าที่จะเข้ามา เกมยิงปลา กันนั่นเองแต่เวลานี้นั้น ถ้าคนไหนกันแน่ได้มาลองเล่นกับ ufabet ของพวกเรานั้นรับรองได้เลยว่าทุกคนที่ได้มาเล่นจริงๆก็จะประทับใจกันอย่างแน่นอนนั่นเอง เพราะว่าอย่างที่รู้กันดีครับผมว่า เว็บของเรานั้นก็พร้อมที่จะแจกโปรโมชั่นแล้วก็โบนัสต่างๆกันอย่างจัดเต็มจริงๆทำให้ทุกคนนั้นก็รู้สึกชื่นชอบกันมากมายก่ายกองและก็กลับมาเล่นกับพวกเรากันทุกหน

  11. Usługi Bankowe, Produkty Bankowe, Kredyt Bankowy, Rachunek Bankowy, Rachunek Bieżący, Kredyt W Rachunku Bieżącym, Kredyt Obrotowy, Kredyt Inwestycyjny, Faktoring, Faktoring Z Regresem, Faktoring Bez Regresu, Pożyczka Hipoteczna, Leasing, Leasing Operacyjny, Leasing Finansowy, Pożyczka Leasingowa, Produkty Skarbowe, Transakcja Spot, Transakcja Forward, Wymiana Walut Spot, Transakcja Swap, Korytarz Walutowy, Opcje Walutowe, Finansowanie Deweloperów, Finansowanie Rolników, Bankowość Dla Wspólnot Mieszkaniowych, Kredyt Stockowy, Kredyt Stokowy, Rachunek Osobisty, Limit Debetowy, Kredyt Gotówkowy, Kredyt Hipoteczny, Karta Kredytowa, Rynki Finansowe, Giełda, Rynek Surowców, Inwestycje Alternatywne

    Podpisaniu umowy z bankiem kredytującym klienta.

  12. Airride System

    Good post. I learn something totally new and challenging on websites I stumbleupon every day. It will always be exciting to read content from other writers and use a little something from other sites.

  13. https://babytears-everlastinglove.blogspot.com

    I don’t know whether it’s just me or if perhaps everybody else encountering issues with your blog.

    It looks like some of the text within your content are running off the screen. Can somebody else please provide feedback and let me know if this is happening to them as well? This may be a problem with my internet browser because I’ve had this happen before. Appreciate it

  14. https://badlydrawnhero.blogspot.com

    Definitely consider that which you said. Your favorite justification seemed to be on the web the simplest factor to consider of. I say to you, I definitely get irked whilst folks consider issues that they just don’t recognise about. You controlled to hit the nail upon the top and also outlined out the entire thing without having side-effects , folks can take a signal. Will likely be back to get more. Thank you

  15. bantenglive.net

    With havin so much content do you ever run into any problems of plagorism or copyright violation? My website has a lot of unique content I’ve either authored myself or outsourced but it looks like a lot of it is popping it up all over the internet without my authorization. Do you know any ways to help reduce content from being stolen? I’d definitely appreciate it.

  16. unlimitedmangas.eklablog.net

    you’re really a good webmaster. The website loading velocity is incredible. It kind of feels that you’re doing any unique trick.

    In addition, The contents are masterwork. you have performed a fantastic activity in this subject!

  17. catgaloman2.blogspot.com

    Thank you for some other fantastic post. Where else may just anybody get that kind of information in such an ideal manner of writing? I’ve a presentation next week, and I’m on the search for such information.

  18. www.kungfuchicken.pw

    I think that everything said was actually very logical. But, what about this? suppose you added a little information? I mean, I don’t want to tell you how to run your website, however what if you added a title to possibly get people’s attention? I mean Testing with Django, Haystack and Whoosh | Reliably Broken is kinda vanilla. You could glance at Yahoo’s front page and watch how they create news headlines to grab viewers interested. You might add a video or a picture or two to get people excited about what you’ve written. Just my opinion, it could bring your posts a little livelier.

  19. f-orgetthatheart.blogspot.com

    Nice post. I was checking constantly this blog and I am inspired! Very helpful info specially the ultimate part : ) I maintain such information much. I was looking for this particular information for a very long time. Thank you and best of luck.

  20. idncapsa.com

    I used to be suggested this web site by my cousin. I’m now not positive whether or not this post is written by means of him as nobody else recognise such targeted about my trouble. You are incredible! Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *