From 85ea5f73673a99d3988106fa3e497240f300f1b3 Mon Sep 17 00:00:00 2001 From: Will Daly Date: Fri, 19 Apr 2013 10:29:58 -0400 Subject: [PATCH 1/4] 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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 Date: Fri, 19 Apr 2013 10:52:15 -0400 Subject: [PATCH 2/4] Resized test pyramid image Fixed mistake in pip install snippet --- doc/development.md | 1 - doc/test_pyramid.png | Bin 29008 -> 24698 bytes doc/testing.md | 10 ++++------ 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/doc/development.md b/doc/development.md index 3db0988ce2..95cc32329c 100644 --- a/doc/development.md +++ b/doc/development.md @@ -12,7 +12,6 @@ This will read the `Gemfile` and install all of the gems specified there. Run the following:: pip install -r requirements.txt - pip install -r test-requirements.txt ### Binaries diff --git a/doc/test_pyramid.png b/doc/test_pyramid.png index ab3d0f5e4704a243159f719e30128ee776c1dc68..5c0eea576274989c345ab00dba928ae7bd3034c4 100644 GIT binary patch literal 24698 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 literal 29008 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 Date: Fri, 19 Apr 2013 11:01:42 -0400 Subject: [PATCH 3/4] Added explanation of testing pyramid --- doc/testing.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/testing.md b/doc/testing.md index f3a1263bc0..2ea2d5abe8 100644 --- a/doc/testing.md +++ b/doc/testing.md @@ -46,7 +46,10 @@ while **minimizing maintenance**. In practice, this usually means investing heavily in unit tests, which tend to be the most robust to changes in the code base. -![Alt text](test_pyramid.png) +![Test Pyramid](test_pyramid.png) + +The pyramid above shows the relative number of unit tests, integration tests, +and acceptance tests. Most of our tests are unit tests or integration tests. ## Test Locations From 2629fc71d60ea4afa9ed6b615292c54fd45b4dad Mon Sep 17 00:00:00 2001 From: Will Daly Date: Fri, 19 Apr 2013 12:41:10 -0400 Subject: [PATCH 4/4] Added troubleshooting tip for jasmine tests (bundle install) Updated jasmine rake documentation to reflect changes Cale made --- doc/testing.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/testing.md b/doc/testing.md index 2ea2d5abe8..84175fee3d 100644 --- a/doc/testing.md +++ b/doc/testing.md @@ -150,9 +150,11 @@ If the `phantomjs` binary is not on the path, set the `PHANTOMJS_PATH` environme PHANTOMJS_PATH=/path/to/phantomjs rake phantomjs_jasmine_{lms,cms} -Once you have run the `rake` command, you can -navigate to `http://localhost:12345/_jasmine/` to see the test results. +Once you have run the `rake` command, your browser should open to +to `http://localhost/_jasmine/`, which displays the test results. +**Troubleshooting**: If you get an error message while running the `rake` task, +try running `bundle install` to install the required ruby gems. ### Running Acceptance Tests