7

我有以下布局:

/spamalot
    /spam
        __init__.py
        spam.py
        /spam_on_eggs
            __init__.py
            spam_on_eggs.py
    /tests

        test_spam.py

垃圾邮件恰好是一个烧瓶应用程序。

spam.py我有

import spam_on_eggs.spam_on_eggs as eggs
# Other Flask setup & application code here.

这很好用 - 从spamalot我能够运行的目录中python spam/spam.py

但是,当我开始将测试加入其中时,它就没有那么棒了。

在我的test_spam.py文件中,我有:

import spam.spam
test_client = spam.spam.app.test_client()

def test_it_fails():
     assert False

但是,它并没有在我期望的地方失败,而是在导入行失败:

/spamalot/ $ py.test
# some output
E    ImportError

__init__.py我可以通过放入我的文件夹来解决这个问题/tests,但是我得到了一个不同的 ImportError:

spam/spam.py:1: in <module>
>    import spam_on_eggs.spam_on_eggs as eggs
E    ImportError: No module named 'spam_on_eggs'

我可以通过行更改为:

from spam.spam_on_eggs import spam_on_eggs

这让我可以进行测试,但后来我破坏了我的跑步能力$ python spam/spam.py——因为我得到了

ImportError: no module named 'spam'

显然,我对模块导入如何工作以及 py.test 如何与该系统一起工作的理解存在差距。

我错过了什么?

是否有可能拥有我所描述的布局 - 并且能够从 spamalot 目录运行 py.test 和我的服务器?

4

1 回答 1

-1

py.test 将始终使用其中包含的最短目录路径__init__.py

将 a__init__.py放入 spamalot 即可导入spamalot.spam.spam.

参考:选择测试布局

于 2014-03-28T19:26:06.627 回答