我正在为一个REST客户端库编写测试,该库必须是" login"使用OAuth交换服务。为了防止我要测试的每个端点的登录,我想写一些"测试设置"但我不确定我该怎么做。
我的测试项目结构:
如果我只有一个"端点类别"我有这样的事情:
describe('Endpoint category 1', () => {
let api: Client = null;
before(() => {
api = new Client(credentials);
});
it('should successfully login using the test credentials', async () => {
await api.login();
});
it('should return xyz\'s profile', async () => {
const r: Lookup = await api.lookup('xyz');
expect(r).to.be.an('object');
});
});
我的问题:
由于login()方法是第一个测试,因此它可以工作,客户端实例也可用于以下所有测试。但是,我如何进行某种设置,我可以在其中记录api实例"可用于我的其他测试文件?
答案 0 :(得分:3)
应将公共代码移至beforeEach
:
beforeEach(async () => {
await api.login();
});
此时should successfully login using the test credentials
没有多大意义,因为它没有断言任何内容。
答案 1 :(得分:1)
describe('Endpoint category 1', () => {
let api: Client = null;
beforeEach(() => {
api = new Client(credentials);
});
afterEach(() => {
// You should make every single test to be ran in a clean environment.
// So do some jobs here, to clean all data created by previous tests.
});
it('should successfully login using the test credentials', async () => {
const ret = await api.login();
// Do some assert for `ret`.
});
context('the other tests', () => {
beforeEach(() => api.login());
it('should return xyz\'s profile', async () => {
const r: Lookup = await api.lookup('xyz');
expect(r).to.be.an('object');
});
});
});
答案 2 :(得分:0)
你看过https://mochajs.org/#asynchronous-code吗?
您可以在测试功能中输入一个完成参数,然后您将收到一个回调函数。
已完成()或已完成(错误/例外)
这样做也可以在之前和之后使用。
当调用done()时,mocha知道您的异步代码已经完成。
阿。如果您想测试登录,则不应将此连接提供给其他测试,因为在默认配置中无法保证测试顺序。
之后只需测试登录和注销。
如果您需要使用“login-session”进行更多测试,请使用befores描述一个新测试。