为什么不(JS测试库)AVA有“套件”(或任何其他分组)?

时间:2016-12-21 18:01:15

标签: javascript testing ava

我正在关注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,我是否会错过摩卡(以及大多数其他测试跑步者)的测试组织?

2 个答案:

答案 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