我使用scraping_test.py
编写了一个名为unittest
的python测试文件,其中包含一个名为TestScrapingUtils
"""Tests for the scraping app"""
import unittest
from bs4 import BeautifulSoup as bs4
from mosque_scraper.management.commands import scraping_utils
from mosque_scraper.selectors import MOSQUE_INFO_ROWS_SELECTOR
class TestScrapingUtils(unittest.TestCase):
"""Test scraping_utils.py """
def setup(self):
"""Setup McSetupface."""
pass
def test_get_keys_from_row(self):
""" Test that we extract the correct keys from the supplied rows."""
test_page_name = "test_page.html"
with open(test_page_name) as test_page_file:
test_mosque = bs4(test_page_file, 'html.parser')
rows = test_mosque.select(MOSQUE_INFO_ROWS_SELECTOR)
field_dict = scraping_utils.get_fields_from_rows(rows)
self.assertDictEqual(field_dict, {})
我的单元测试设置是:
{
"python.unitTest.unittestEnabled": true,
"python.unitTest.unittestArgs": [
"-v",
"-s",
".",
"-p",
"*test.py"
]
}
它看起来应该可以工作,但当我点击在VSCode中运行测试时,它表示没有发现任何测试:
No tests discovered, please check the configuration settings for the tests.
如何让它发挥作用?
答案 0 :(得分:2)
你必须使用快捷键shift + ctrl p运行一次,然后输入“Python run all units tests”。
在成功执行至少一次或使用发现单元测试方法之前,它不会显示在编辑器中。
然而有一件事让我感到困惑的是Python文件必须是一个有效的Python文件。 VS Code for Python中的intellisense并不复杂(与Javascript或Typescript相比),并且它不会突出显示任何语法错误。您可以通过强制它来验证它是否运行所有单元测试并观察Python Test Log窗口。
答案 1 :(得分:1)
让我着迷的是,必须在每个子目录中创建__init__.py
文件,从使用-s
选项指定的根文件夹(在本示例中为当前目录"."
)到测试模块所在的子目录。直到那时,我才能够成功发现测试。
在问题示例中,project_dir/
和project_dir/scraping_app/
都应包含__init__.py
。假设settings.json
位于project_dir/.vscode
中,并且测试从project_dir/
目录运行。
编辑:或者,将"-s", "./scraping_app/"
用作根测试目录,这样就不必将__init__.py
放入project_dir/
。
答案 2 :(得分:0)
对我来说,发现单元测试可以解决问题。
SHIFT + CTRL + P 并执行“ Python:发现单元测试”
运行此命令后,我将在每个测试功能上获得“运行测试|调试测试”。
答案 3 :(得分:0)
不是文件名“ scraping_test.py”,而是“ test_scraping.py” 字符串应以“ test”前缀开头
答案 4 :(得分:0)
我在配置略有不同的情况下遇到相同的错误。 (我将其发布在这里,因为这是搜索此错误时出现的问题。)
除了上述内容外,在测试文件名中不要使用句点(例如,使用module_test.py
代替module.test.py
)也很重要。
答案 5 :(得分:0)
您可以在测试包的 DJANGO_SETTINGS_MODULE
文件中添加 django.setup()
变量和 __init__.py
。
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_app.settings')
django.setup()
答案 6 :(得分:0)
就我而言,问题在于我的测试正在导入一个模块,该模块正在使用 os.environ['ENV_NAME']
读取环境变量。如果该变量不存在,则会引发错误。但是 VS Code 没有记录任何内容(或者至少我找不到)。
所以,原因是我的 .env 文件不在工作区根目录中。所以我不得不将 "python.envFile": "${workspaceFolder}/path/to/.env"
添加到 settings.json
文件中。
之后,测试成功。