Estou executando este comando:
python manage.py test project.apps.app1.tests
e isso causa este erro:
AttributeError: o objeto 'módulo' não tem atributo 'testes'
Abaixo está minha estrutura de diretório. Eu também adicionei app1 à minha configuração de aplicativos instalados.
Traceback (most recent call last):
File "manage.py", line 10, in <module> execute_from_command_line(sys.argv)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 50, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 71, in execute
super(Command, self).execute(*args, **options)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 88, in handle
failures = test_runner.run_tests(test_labels)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 146, in run_tests
suite = self.build_suite(test_labels, extra_tests)
File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 66, in build_suite
tests = self.test_loader.loadTestsFromName(label)
File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'tests'
Estrutura do diretório:
python -c "from project.apps.app1.tests import *"
__all__
variável em cada arquivo? E especificar uma lista de nomes de classes, funções e variáveis para exportar ao usarfrom package_name.module import *
? Tive sorte com esse padrão. Eu entendo que leva um pouco mais de tempo para escrever a parte__all__
no topo de cada arquivo. Mas a importação usando " estrela da morte " parece funcionar bem.Usar:
./manage.py shell
Seguido por
import myapp.tests
para encontrar a natureza do erro de importação.
fonte
./manage.py shell
então umimport myapp.tests
oufrom myapp.tests import *
ambos funcionaram sem erros. Mas, ainda recebo o erro descrito pelo OP.Para o meu caso, preciso criar um __init__.py vazio na minha
app/tests
pastafonte
O exemplo de Steve Bradshaw acima funciona para erros de importação (obrigado Steve).
Outros tipos de erros (por exemplo, ValueError) também podem causar
para ver quais são esses erros
fonte
Eu tive o mesmo erro que Chris. Eu havia excluído um modelo antigo e executado tests.py, mas outro arquivo (views.py) ainda estava tentando importar o modelo excluído.
Quando tirei a declaração de importação, agora obsoleta, o problema foi resolvido.
fonte
Certifique-se de que todos os módulos que você está usando em seu script não estejam corrompidos. Com isso, quero dizer verificar a ortografia em suas declarações de importação.
Você pode testar seus módulos executando instruções de importação no console interativo do djano.
fonte
Resolvi o erro "AttributeError: módulo 'utils' não tem atributo 'name_of_my_function'" corrigindo uma referência de importação circular. Cada um dos meus arquivos manage.py e utils.py tinha uma declaração de importação apontando um para o outro.
fonte
De acordo com o documento django Quando você executa seus testes , o comportamento padrão do utilitário de teste é encontrar todos os casos de teste (isto é, subclasses de unittest.TestCase ) em qualquer arquivo cujo nome comece com test, construir automaticamente um conjunto de testes a partir de esses casos de teste e execute esse conjunto.
então tente isto:
python manage.py test tests.py
fonte
Recebi o mesmo erro, mas verifiquei todos os motivos da lista aqui, não corrigiu meu problema.
Por fim, descubra isso, o motivo é que o nome de um método que importou, mas ainda não foi usado, não está correto. Embora seja um erro estúpido, isso acontece.
fonte
Eu tive o mesmo erro. Acontece que eu chamei meu módulo de common.py, mas já havia algum outro módulo common.py. Tudo que precisei fazer foi renomear meu módulo.
fonte
Eu tive um erro semelhante ao escrever um unittest.TestCase. Quando redigitei a mesma definição de método atual, pareceu funcionar!
A única mudança que notei no PyCharm foi o ícone 'override' pop-up pela segunda vez, já que o método setup (self) precisa substituir o método original definido no TestCase.
fonte