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

时间:2012-05-09 14:56:58

标签: javascript unit-testing jasmine

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

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

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

1 个答案:

答案 0 :(得分:1)

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

例如:

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

  afterEach(function () {
    ...
  });

  it('...', function () { ... });

});

在任何情况下,尽管最佳做法是不实际执行db操作:假设您使用了一些已经过测试的库。如果您模拟您的数据库层,它将为您节省很多麻烦。您可以使用spies来有效地使用jasmine执行此操作。

例如,让我们假设你的db层有一个get(id)函数,它返回一些json。你可能会这样做:

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'});
});