简体   繁体   中英

How can I start django unittest in VSCode?

I'm trying to run django unittest using VSCode, not terminal.

my project tree looks like this:

├── db.sqlite3
├── hero
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   ├── admin.cpython-37.pyc
│   │   ├── apps.cpython-37.pyc
│   │   ├── models.cpython-37.pyc
│   │   ├── tests.cpython-37.pyc
│   │   ├── urls.cpython-37.pyc
│   │   └── views.cpython-37.pyc
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── 0002_hero_age.py
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       ├── 0001_initial.cpython-37.pyc
│   │       ├── 0002_hero_age.cpython-37.pyc
│   │       └── __init__.cpython-37.pyc
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
└── toh
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-37.pyc
    │   ├── settings.cpython-37.pyc
    │   ├── urls.cpython-37.pyc
    │   └── wsgi.cpython-37.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

I made tests.py file inside hero directory.

My tests.py code looks like this:

from django.test import TestCase, Client
from .models import Hero
# Create your tests here.
class HeroTestCase(TestCase):
    def setUp(self):
        Hero.objects.create(name='Superman', age=10)
        Hero.objects.create(name='Batman', age=1)
        Hero.objects.create(name='Ironman', age=30)

    def test_hero_count(self):
        self.assertEqual(Hero.objects.all().count(), 3)
    def test_hero_id(self):
        client=Client()
        response=client.get('/hero/1/')

        self.assertEqual(response.status_code, 200)
        self.assertIn('1', response.content.decode())
    def test_hero_visit_count(self):
        client = Client()
        response = client.get('/hero/hello')
        self.assertEqual(response.status_code, 200)
        self.assertIn('1', response.content.decode())
        response = client.get('/hero/hello')
        self.assertEqual(response.status_code, 200)
        self.assertIn('2', response.content.decode())

And my.vscode/settings.json looks like this:

{
    "python.pythonPath": "/anaconda3/bin/python",
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
    "python.testing.unittestArgs": [
        "-v",
        "-s",
        "./hero",
        "-p",
        "*test*.py"
    ],
    "python.testing.pytestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.unittestEnabled": true
}

But when I ran test by VSCode this error keeps coming out.

======================================================================
ERROR: tests (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests
Traceback (most recent call last):
  File "/anaconda3/lib/python3.7/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/anaconda3/lib/python3.7/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "toh/hero/tests.py", line 2, in <module>
    from .models import Hero
ImportError: attempted relative import with no known parent package

Or:

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

So I checked whether there are something wrong with my test code, but my test code pass when I ran python manage.py test ? How do I resolve this problem?

The relative import problem is because you set -p to hero which changes the top-level directory to that and so it no longer looks like a package to Python.

The configuration problem is because unittest isn't running manage.py . You can go to https://github.com/microsoft/vscode-python/issues/73 and the issue to vote for it to be prioritized.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM