我正在关注AVA测试运行器,它的并发功能似乎非常引人注目。但是,我已经习惯了Mocha,你可以在那里组织你的测试:
describe('Some Class', () => {
describe('#someMethod', () => {
describe('some condition', () => {
it('does something', () => {});
});
});
});
通过以这种方式组织测试,您可以轻松地告知在一堆测试失败时哪些组件受到影响,并且您可以轻松地为特定类/方法/条件重新运行测试。
但AVA没有这些。它的测试完全没有任何“元信息”,只是:
test(t => {
t.deepEqual([1, 2], [1, 2]);
});
但显然AVA是一个受欢迎且广泛使用的框架,所以我的问题是:没有测试元信息它是如何工作的?还有其他一些在AVA中定义元信息的方法吗?由于AVA具有其他功能,是不是需要元信息?
基本上,作为一个AVA局外人,我试图了解当你有一个真正的测试套件时它是如何工作的(不仅仅是AVA例子中显示的基本测试)。换句话说,如果我转用AVA,我是否会错过摩卡(以及大多数其他测试跑步者)的测试组织?
答案 0 :(得分:8)
现在使用Ava看起来我的问题的答案似乎是Ava 拥有套件,但与明确定义套件的Mocha(或类似框架)不同,Ava中的套件是隐式的,并且基于包含测试的文件。
换句话说,如果您想在给定的"套件"中运行某些代码beforeEach
测试,您只需将这些测试放在与test.beforeEach
语句相同的文件中,然后它只会在那些测试之前运行。
显然,这会导致较小的测试输出,因为您无法以Mocha的方式嵌套describe
语句。但是,当Ava显示测试输出时,它会使用文件结构来帮助缓解此问题。
例如,测试"可以登录"在一个文件`services / facebook'会导致以下输出:
服务> facebook>可以登录
答案 1 :(得分:1)
如果需要,可以使用模块from datetime import datetime
from flask import current_app
from inventory import db, login_manager
from flask_login import UserMixin
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
class User(db.Model, UserMixin):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
fullname = db.Column(db.String(120), nullable=False)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
phone = db.Column(db.String(50), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
items = db.relationship('Items', backref='items_admin', lazy=True)
orderitems = db.relationship('OrderItems', backref='user_order', lazy=True)
def get_reset_token(self, expires_sec=30000):
s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
return s.dumps({'user_id': self.id}).decode('ascii') # This is the line that throws the said error.
@staticmethod
def verify_reset_token(token):
s = Serializer(current_app.config['SECRET_KEY'])
try:
user_id = s.loads(token)['user_id']
except:
return None
return User.query.get(user_id)
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.image_file}')"
尝试将其重新引入ava