问题描述
我在编写烧瓶项目的单元测试时遇到麻烦,在烧瓶项目中烧瓶路径使用用户信息。该视图在探索性测试下可以完美工作,但是在尝试编写单元测试时遇到了问题。
模型
class User(UserMixin,db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64),unique=True,index=True)
email = db.Column(db.String(120),index=True)
role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))
password_hash = db.Column(db.String(128))
company = db.Column(db.Integer,db.ForeignKey('companies.name'),nullable=True)
def __repr__(self):
return '<User %r>' % self.username
class Company(db.Model):
__tablename__ = 'companies'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(160),unique=True)
company_about = db.Column(db.Text)
company_created = db.Column(db.DateTime,index=True,default=datetime.utcNow)
members = db.relationship('User',backref='users_company',lazy=True)
def __repr__(self):
return '<Company %r>' % self.name
查看
@main.route('/create_company',methods=['GET','POST'])
@login_required
def create_company():
form = CompanyForm()
if current_user.can(Permission.EDIT) and form.validate_on_submit():
company = Company(name = form.name.data,company_about = form.company_about.data)
db.session.add(company)
current_user.role = Role.query.filter_by(name='Moderator').first()
current_user.company = company.name
db.session.commit()
flash('Your company has been created.')
return redirect(url_for('.index'))
return render_template('companies/create_company.html',form=form)
测试
class CompanyViewsTestCase(unittest.TestCase):
def setUp(self):
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
db.create_all()
Role.insert_roles()
self.client = self.app.test_client(use_cookies=True)
def tearDown(self):
db.session.remove()
db.drop_all()
self.app_context.pop()
#### helper methods ####
def login_user(self,email,password):
return self.client.post(
'/auth/login',data=dict(email=email,password=password),follow_redirects=True
)
def create_company(self,name,company_about):
return self.client.post(
'/create_company',data=dict(name = name,company_about = company_about),follow_redirects=True
)
######
def test_create_companies_with_flask_session(self):
role = Role.query.filter_by(name='Organiser').first()
u = User(forename='John',surname='Smith',username='john_1',email='john@example.com',password='cat',role=role)
db.session.add(u)
db.session.commit()
with self.client as c:
c.post('/auth/login',data=dict(email='john@example.com',password='cat'),follow_redirects=True)
response = c.post('/create_company',data=dict(name='Amazing Company',company_about='We are pretty good'),follow_redirects=True)
self.assertEqual(response.status_code,200)
self.assertTrue(b'Your company has been created.',response.data)
company = Company.query.filter_by(name='Amazing Company').first()
self.assertTrue(company != None)
def test_company_creater_is_Now_member(self):
role = Role.query.filter_by(name='Organiser').first()
u = User(forename='John',role=role)
db.session.add(u)
db.session.commit()
assert self.login_user(email='john@example.com',password='cat').status_code == 200
response = self.create_company(name='Amazing Company',company_about='We are pretty good')
self.assertEqual(response.status_code,200)
self.assertTrue(b'Your company has been created.',response.data)
company = Company.query.filter_by(name='Amazing Company')
new_role = Role.query.filter_by(name='Moderator').first()
self.assertTrue(u.users_company == 'Amazing Experiences')
print(u.role_id)
我尝试使用不同的方法没有成功。我以为在第一个测试中使用flask.session(https://flask.palletsprojects.com/en/1.1.x/testing/#accessing-and-modifying-sessions)可能有用,但是我仍然没有得到我期望的结果。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)