1

我开始使用 Lab 来测试我的 API。API 执行通常的 CRUD 操作,我想知道我应该如何测试需要文档 ID 的 Update 和 Delete 方法。

我的 API 在内部返回新创建的 mongo 文档response.payload。我不明白为什么在DELETE测试resultId中是undefined.

这是我的代码:

lab.experiment('User module', () => {

    var resultId; // Initialize a variable to save the document ID later.

    lab.test('should create user', (done) => {
        var options = {
            method: 'POST',
            url: '/api/v1/users',
            payload: {
                username: 'testUser',
                password: 'testPassword'
            }
        };

        server.inject(options, (response) => {
            resultId = response.payload._id; // Update resultId
            Code.expect(response.statusCode).to.equal(200);
            done();
        });
    });

    lab.test('should delete user', (done) => {
        var options = {
            method: 'DELETE',
            url: '/api/v1/users/' + resultId // Turns out resultId is undefined
        };

        server.inject(options, (response) => {
            Code.expect(response.statusCode).to.equal(200);
            done();
        });
    });

});
4

1 回答 1

0

如果您使用该-p标志运行实验室,则您的两个测试用例将并行运行。这意味着第二个测试用例正在评估resultId第一个测试用例更改之前的值。

让一个测试用例依赖于另一个测试用例改变一些公共变量是不好的做法。您的测试用例应该彼此完全独立。删除/添加一个测试用例不应该破坏另一个。这对于维护来说将是一个真正的痛苦。

使您的测试原子化并尽可能独立。即使这意味着一些重复。或者,lab.beforeEach如果您需要在每次测试之前设置一些通用状态,您也可以使用。

于 2015-11-13T16:55:15.603 回答