查找了很久,改正了些小错误,但是最后测试依旧无法通过,实在找不到哪里有问题,只能推测出是临时数据库的调用问题。
我会把相关代码和报错截图放上来让大家帮我看看。
这个是我的test_watchlist的部分代码(可只看setUp和login和test_login和test_index_page这四个函数)
import unittest
from bs4 import BeautifulSoup
from app import app, db, Movie, User, forge, admin, initdb
class test_watchlist(unittest.TestCase):
def setUp(self):
app.config.update(
TESTING=True,
SQLALCHEMY_DATABASE_URI=‘sqlite:///:memory:’
)
db.create_all()
user=User(name=‘Test’, username=‘test’)
user.set_password(‘1234’)
movie=Movie(title=‘test movie’, year=‘2019’)
#db.session.add_all([user,movie])
db.session.add(user)
db.session.add(movie)
db.session.commit()
self.client=app.test_client()
self.runner=app.test_cli_runner()
def teardown(self):
db.session.remove()
db.drop_all()
def login(self):
self.client.post('/login', data=dict(
username='test',
password='1234'
),follow_redirects=True)
def test_app_exist(self):
self.assertIsNotNone(app)
def test_app_is_testing(self):
self.assertTrue(app.config['TESTING'])
def test_index_page(self):
response=self.client.get('/')
data = response.get_data(as_text=True)
self.assertIn("Test's Watchlist",data)
#self.assertIn('test movie', data)
self.assertEqual(response.status_code, 200)
def test_login(self):
response=self.client.post('/login', data=dict(
username='test',
password='1234'),follow_redirects=True)
data=response.get_data(as_text=True)
self.assertIn('login yep', data)
self.assertIn('logout', data)
self.assertIn('seting', data)
response=self.client.post('/login', data=dict(
username='test',
password='11111'),follow_redirects=True)
data=response.get_data(as_text=True)
self.assertIn('error username or password', data)
response=self.client.post('/login', data=dict(
username='wrong',
password='1234'),follow_redirects=True)
data=response.get_data(as_text=True)
self.assertIn('error username or password', data)
response=self.client.post('/login', data=dict(
username='',
password='1234'),follow_redirects=True)
data=response.get_data(as_text=True)
self.assertIn('error username or password', data)
response=self.client.post('/login', data=dict(
username='test',
password=''),follow_redirects=True)
data=response.get_data(as_text=True)
self.assertIn('error username or password', data)
if name==‘main’:
unittest.main()
可看到红线处的报错都和login(登陆)有关。
从这两个图我推测是数据库调用问题。第一个图的报错可看出,主页面会生成xxx’s watchlist这个标题,临时数据库的name是Test,但是黄线处可看出实际的name是admin(是本地数据库的第一个用户)
第二个图是生成xxx’s watchlist标题的基模板代码。
已经排查过很多次,很多地方,改正过一些小错误,但问题依旧无法解决,也直接用作者的github代码运行过,作者的test_watchlist.py也是这么报错。希望大家能给我些建议。