【问题标题】:How to import Flask app on test file to make unittest如何在测试文件上导入 Flask 应用程序以进行单元测试
【发布时间】:2019-07-09 21:18:38
【问题描述】:

我正在尝试从烧瓶中导入应用程序以进行单元测试,但导入时遇到问题:

错误描述:Traceback(最近一次调用最后一次):文件 “tests.py”,第 4 行,在 从应用程序导入应用程序文件“/home/master/Workspaces/eduCAT/faq-test/api/app.py”,第 4 行,在 from .models import Question, QuestionSchema, Message, MessageSchema ImportError: 尝试相对导入但未知 父包

我有一个文件树,所有文件都在同一个文件夹中,如下所示:

Folder [api]

-> __init__.py

-> app.py

-> models.py

-> test.py

-> config.py

API 在 flask run 中运行良好,但是当我尝试将 app 导入到 test.py 时出现此错误.

进口: app.py

from flask import jsonify, request
from .models import Question, QuestionSchema, Message, MessageSchema
from api import app, db

进口: __init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow


app = Flask(__name__)
app.config.from_object('api.config')

db = SQLAlchemy(app)
ma = Marshmallow(app)

进口: models.py

from api import db, ma

test.py

import os
import unittest

from app import app

我已经在 test.py 上尝试过的导入: 进口:

from app import app

错误:

Traceback(最近一次调用最后一次):文件“tests.py”,第 4 行,在 从应用程序导入应用程序文件“/home/master/Workspaces/eduCAT/faq-test/api/app.py”,第 4 行,在 from .models import Question, QuestionSchema, Message, MessageSchema ImportError: 尝试相对导入但未知 父包

导入:

from .app import app

错误:

Traceback(最近一次调用最后一次):文件“tests.py”,第 4 行,在 from .app import app ModuleNotFoundError: No module named 'ma​​in.app'; 'ma​​in' 不是包

导入:

from api import app

错误:

Traceback(最近一次调用最后一次):文件“tests.py”,第 4 行,在 from api import app ModuleNotFoundError: No module named 'api'

我被这个测试卡住了。

编辑 完整代码

app.py - https://dpaste.de/JgEi

__init__.py - https://dpaste.de/A9sG

models.py - https://dpaste.de/xEx4

config.py - https://dpaste.de/o8pS

test.py - https://dpaste.de/nGrF

【问题讨论】:

  • 你的烧瓶应用是在哪里定义的?即这行代码:app = Flask(name)
  • 在 __init__.py from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_marshmallow import Marshmallow app = Flask(__name__) app.config.from_object('api.config') db = SQLAlchemy(app) ma = Marshmallow(app)
  • 我相信问题是您有一个名为 app.py 的文件,并且您在 init.py 文件中创建烧瓶应用程序作为变量,也称为 app 所以 python 在破译您的应用程序时遇到问题想进口。也许您可以将 app.py 重命名为其他名称?然后像这样从 test.py 导入应用程序: from api import app
  • 将 app.py 重命名为 wgsi.py 并将导入更改为 from api import app,仍然报错:ModuleNotFoundError: No module named 'api'
  • @Nathan 我已经发布了完整的代码,我花了几个小时试图让测试工作,我不知道该怎么做 =/

标签: python-3.x rest api flask flask-sqlalchemy


【解决方案1】:

您需要修复一些导入才能运行代码...

init.py 导入对象的示例你使用吗

from . import app, db

或者创建一个名为app的包并在里面输入init.py

【讨论】:

  • Opa, o app já esta rodando, os 进口没有 init。 foram paratentar fazer o arquivo de teste funcionar, rodando o app como flask run a api funciona normal, o problema esta sendo para importar o app do flask dentro do teste.py O init está assim atualmente mesmo “来自 .import app, db”。 Mas quando rodo python test.py。 Retorna ModuleNotFoundError: No module named 'api'
  • Ja tentei dentro do teste.py "from app import app","from .import app","from .app import app","from api.app import app","from 程序导入应用程序”,e nada vai =/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2014-06-03
  • 2012-01-08
  • 2022-06-14
相关资源
最近更新 更多