如果我想在每次测试之前初始化数据库,如何组织代码

How to organize the code if I want to initialize database before each tests?

本文关键字:数据库 初始化 代码 何组织 测试 如果      更新时间:2023-09-26

我是茉莉花的新手,我想为 mongodb 操作编写一些测试。

假设我在目录 spec 下有几个.spec.js文件,其中的所有测试都应该删除测试数据库并插入一些测试数据。

我应该如何组织代码?我是否应该在某处定义一个init()方法,并从所有其他测试中调用它?还是有更好的解决方案?

describe中,您可以像往常一样使用测试框架调用beforeEachafterEach。这是设置和拆除测试先决条件的正确位置。

例如:

describe('My Module', function () {
  beforeEach(function () {
    ...
  });
  afterEach(function () {
    ...
  });
  it('...', function () { ... });
});

无论如何,最佳做法是不要实际执行数据库操作:大概您使用了一些已经测试过的库。如果您模拟数据库层,这将为您节省很多麻烦。你可以通过使用间谍有效地用茉莉花做到这一点。

例如,假设您的数据库层有一个返回一些 json 的 get(id) 函数。您可能正在执行以下操作:

it('can access the db', function () {
  var spy = spyOn(db, 'get').andCallFake(function (id) {
    expect(id).toEqual('foo');
    return {title: 'Foo Bar'};
  });
  // Something here does stuff that would result to a call to db.get
  var res = db_calling_function('foo');
  expect(spy).toHaveBeenCalled();
  expect(res).toEqual({title: 'Foo Bar'});
});