From 85ea5f73673a99d3988106fa3e497240f300f1b3 Mon Sep 17 00:00:00 2001 From: Will Daly Date: Fri, 19 Apr 2013 10:29:58 -0400 Subject: [PATCH] Updated testing documentation --- doc/development.md | 70 +------------ doc/test_pyramid.png | Bin 0 -> 29008 bytes doc/testing.md | 233 +++++++++++++++++++++++++++++++++++-------- 3 files changed, 193 insertions(+), 110 deletions(-) create mode 100644 doc/test_pyramid.png diff --git a/doc/development.md b/doc/development.md index e89d8b19af..3db0988ce2 100644 --- a/doc/development.md +++ b/doc/development.md @@ -52,77 +52,13 @@ or with additional options: *N.B.* You may have to escape the `[` characters, depending on your shell: `rake "lms[test,5000]"` -## Running tests - -### Python Tests - -This runs all the tests (long, uses collectstatic): - - rake test - -If if you aren't changing static files, can run `rake test` once, then run - - rake fasttest_lms - -or - - rake fasttest_cms - -xmodule can be tested independently, with this: - - rake test_common/lib/xmodule - -To run a single django test class: - - django-admin.py test --settings=lms.envs.test --pythonpath=. lms/djangoapps/courseware/tests/tests.py:TestViewAuth - -To run a single django test: - - django-admin.py test --settings=lms.envs.test --pythonpath=. lms/djangoapps/courseware/tests/tests.py:TestViewAuth.test_dark_launch - - -To run a single nose test file: - - nosetests common/lib/xmodule/xmodule/tests/test_stringify.py - -To run a single nose test: - - nosetests common/lib/xmodule/xmodule/tests/test_stringify.py:test_stringify - - -Very handy: if you uncomment the `pdb=1` line in `setup.cfg`, it will drop you into pdb on error. This lets you go up and down the stack and see what the values of the variables are. Check out http://docs.python.org/library/pdb.html - - -### Javascript Tests - -These commands start a development server with jasmine testing enabled, and launch your default browser -pointing to those tests - - rake browse_jasmine_{lms,cms} - -To run the tests headless, you must install phantomjs (http://phantomjs.org/download.html). - - rake phantomjs_jasmine_{lms,cms} - -If the `phantomjs` binary is not on the path, set the `PHANTOMJS_PATH` environment variable to point to it - - PHANTOMJS_PATH=/path/to/phantomjs rake phantomjs_jasmine_{lms,cms} - - -## Getting More Information - -Run the following to see a list of all rake tasks available and their arguments +To get a full list of available rake tasks, use: rake -T -## Testing using queue servers - -When testing problems that use a queue server on AWS (e.g. sandbox-xqueue.edx.org), you'll need to run your server on your public IP, like so. - -`django-admin.py runserver --settings=lms.envs.dev --pythonpath=. 0.0.0.0:8000` - -When you connect to the LMS, you need to use the public ip. Use `ifconfig` to figure out the numnber, and connect e.g. to `http://18.3.4.5:8000/` +## Running Tests +See `testing.md` for instructions on running the test suite. ## Content development diff --git a/doc/test_pyramid.png b/doc/test_pyramid.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3d0f5e4704a243159f719e30128ee776c1dc68 GIT binary patch literal 29008 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