<div dir="ltr">So I came up with the following solution:<div><br></div><div><div># --- Global IPython Shell used in the rest of the test no need to keep recreating.</div><div>ipshell = app_magics.get_ip_shell()</div><div>app_magics.load_app_magics(ipshell)</div>
</div><div><br></div><div style>I could then do things like the following in my unit tests:</div><div style><br></div><div style><div>class TestAppMagics(object):</div><div>    def setup(self):</div><div>        pass</div>
<div><br></div><div>    def teardown(self):</div><div>        pass</div><div><br></div><div>    def test_simulated_positions(self):</div><div>        &quot;&quot;&quot;</div><div>        Test our computation of the current positions</div>
<div>        &quot;&quot;&quot;</div><div>        # NOTE: This is just a stub to show how things might work</div><div style>        # hardcoded values will be replaced</div><div>        ipshell.run_cell(&#39;result = %current_simulated_positions&#39;)</div>
<div>        csp = ipshell.user_ns[&#39;result&#39;]</div><div>        nose.tools.eq_(csp[&#39;x&#39;], -330, &#39;position x: %s dose not match expected result -330&#39; % csp[&#39;x&#39;])</div><div><br></div><div style>
I looked at what was being done in test_interactiveshell.py in <a href="https://github.com/ipython/ipython/blob/master/IPython/core/tests/test_interactiveshell.py">IPython.core.tests.test_interactiveshell.</a></div><div style>
<br></div><div style>I know that this doesn&#39;t give me true isolation from IPython, but it seems to work.</div><div style>Any comments?</div><div style><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sun, Mar 31, 2013 at 10:39 PM, Aquil H. Abdullah <span dir="ltr">&lt;<a href="mailto:aquil.abdullah@gmail.com" target="_blank">aquil.abdullah@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hello All,<div><br></div><div>I am working on an application that uses IPython for a user interface. Basically, I need to interact with the results of a long running process.  I&#39;ve decided to use the InteracteShellEmbed class along with a Magics subclass to make things a little bit easier for the users.</div>

<div><br></div><div>I like to write unit tests as I develop my code, but it isn&#39;t quite clear to me how to unit tests classes that inherit from Magics and are decorated by line_magic or needs_local_scope.</div><div><br>

</div><div>For example, let&#39;s say I have the following code:</div><div><br></div><div><div>@magics_class</div><div>class AppMagics(Magics):</div><div>    &quot;&quot;&quot;</div><div>    Application magics to do stuff</div>

<div>    &quot;&quot;&quot;</div><div>    @needs_local_scope</div><div>    @line_magic</div><div>    def peek_a_boo(self, line, local_ns=None):</div><div>        &quot;&quot;&quot;</div><div>        In [Peek 2]: x = 10</div>

<div><br></div><div>        In [Peek 3]: %peek_a_boo x</div><div>        Out[Peek 3]: 420</div><div>        &quot;&quot;&quot;</div><div>        var = local_ns.get(line)</div><div>        cool_stuff = 42 * int(var)</div>
<div>
        return col_stuff</div></div><div><div><br></div><div>In this instance I can use a a doc-test, however after reading the Dev: Testing page on github , <a href="https://github.com/ipython/ipython/wiki/Dev%3A-Testing" target="_blank">https://github.com/ipython/ipython/wiki/Dev%3A-Testing</a>.  It looks like I&#39;ll have to make some modifications which I don&#39;t quite understand.</div>

<div><br></div><div>Can anyone provide me with some resources for a newb to figure out how to right unit tests for Magics?</div><span class="HOEnZb"><font color="#888888"><div><br></div><div><br></div>-- <br>Aquil H. Abdullah<br>
<a href="mailto:aquil.abdullah@gmail.com" target="_blank">aquil.abdullah@gmail.com</a>
</font></span></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Aquil H. Abdullah<br><a href="mailto:aquil.abdullah@gmail.com">aquil.abdullah@gmail.com</a>
</div>