【问题标题】:Testing Hapijs API with Lab使用实验室测试 Hapijs API
【发布时间】:2015-11-14 00:55:34
【问题描述】:

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

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

这是我的代码:

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

});

【问题讨论】:

    标签: javascript testing hapijs lab


    【解决方案1】:

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

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

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

    【讨论】:

    • 我没有使用-p 标志,但我看到一个测试如何依赖于另一个测试的结果是不好的。感谢您指出了这一点。但是,我应该如何测试那些需要 mongo 文档存在的端点?
    • 你可以模拟你的数据库对象。或者使用带有夹具的测试数据库。
    • @MattHarrison 只是一个简单的例子将不胜感激:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多