我在所有测试中使用相同的before()和after()根级挂钩来设置和清除我的测试数据库... 有没有办法将它们移动到文件中并导出/导入该文件?
答案 0 :(得分:0)
是。我能够利用mocha的this
上下文来实现这种行为,在他们的Wiki文章中讨论过shared behaviors。我正在使用ts-mocha
来解释异步/等待功能。
所以我使用supertest-session
编写了登录和注销的功能,它看起来像这样:
export function authHooks()
{
const email = UsersSeed[0].email;
const password = UsersSeed[0].password;
before(`login ${email}`, async function()
{
await this.session.post('/api/account/login')
.send({ email, password })
.expect(201);
});
after(`logout ${email}`, async function()
{
await this.session.get('/api/account/logout')
.expect(200);
});
}
在我的describe
内部,我设置了this.session
,并在it
- 语句中我可以重复使用它。它看起来有点像这样:
import { expect } from 'chai';
import * as Session from 'supertest-session';
import { authHooks } from './authHooks';
describe('Some Suite', () =>
{
before(function()
{
this.session = new Session(SomeApp);
});
after(function()
{
this.session.destroy();
});
describe('when not authenticated', () =>
{
it('returns 403', async function()
{
await this.session.get('/api/jobs')
.expect(403)
.expect({ statusCode: 403, message: 'Forbidden resource' });
});
});
describe('when authenticated', () =>
{
authHooks();
describe('when finding jobs', () =>
{
it('returns all jobs', async function()
{
await this.session.get('/api/jobs')
.expect(200)
.then((response) =>
{
expect(response.body).to.deep.eq(SomeThing);
});
});
});
});
});
我不确定这是否是实现它的最佳方式(我不是个人使用function
而非() => {}
的粉丝),但我确认它有效
上述代码不会主要运行,因为我保护代码细节,但希望这将为您提供至少一个选项,也许其他人可以显示更好的方法来执行此操作。