I'm trying to patch a public method for my flask application but it doesn't seem to work.
Here's my code in mrss.feed_burner
def get_feed(env=os.environ):
return 'something'
And this is how I use it
@app.route("/feed")
def feed():
mrss_feed = get_feed(env=os.environ)
response = make_response(mrss_feed)
response.headers["Content-Type"] = "application/xml"
return response
And this is my test which it's not parsing.
def test_feed(self):
with patch('mrss.feed_burner.get_feed', new=lambda: '<xml></xml>'):
response = self.app.get('/feed')
self.assertEquals('<xml></xml>', response.data)
I believe your problem is that you're not patching in the right namespace. See where_to_patch documentation for
unittest.mock.patch
.Essentially, you're patching the definition of
get_feed()
inmrss.feed_burner
but your view handlerfeed()
already has a reference to the originalmrss.feed_burner.get_feed()
. To solve this problem, you need to patch the reference in your view file.Based on your usage of
get_feed
in your view function, I assume you're importingget_feed
like soview_file.py
If so, you should be patching
view_file.get_feed
like so: