摩卡:使用它 - 每个都有因变量

时间:2016-06-29 14:02:12

标签: node.js loops mocha supertest

所以我在使用mocha中的每个模块进行循环测试时遇到了一些麻烦。我使用supertest,应该和它 - 每个模块。

var hasAccess = [{endpoint: "announcements", send: {"creator": users}}]

用户是我在此测试中分配的varibale

it('users', function(done) {
        api.get('/users')
        .set('Accept', 'application/json')
        .set('Authorization', devToken)
        .expect(200)
        .expect('Content-Type', /json/)
        .end(function(err, res) {
            if (err) return done(err)
            res.body[0].should.have.property('id')
            users = res.body[0].id                //<----------
            done()
        });
    });

我的 - 每个

it.each(hasAccess, 'should return 201 perfoming a POST on %s', ['endpoint'], function(element, next) {

   console.log(element.send) //prints out "creator": undefined

   api.post('/' + element.endpoint)
        .set('Accept', 'application/json')
        .set('Authorization', userToken)
        .expect('Content-Type', /json/)
        .send(element.send)
        .expect(201)
        .end(function(err, res) {
            if (err) return next(err)
            res.status.should.equal(201)
            next()
        });
});

问题是,在为用户分配值之前, hasAccess 正在传递给它。我知道让测试依赖于彼此是不好的做法,但实际上还没有其他方法可以测试。我需要id来完全测试这个。那么任何想法? 此外, hasAccess 中会有更多对象,因此循环是最好的方法。只是缩短了它。

1 个答案:

答案 0 :(得分:1)

你真的不应该让测试彼此依赖,但如果你必须......

问题不在于it.each,而在于您如何存储第一次测试中获得的用户ID。您可以像这样创建数组:

var hasAccess = [{endpoint: "announcements", send: {"creator": users}}]

这会从users字段获取hasAccess[0].send.creator的值。此时为undefined,因此字段获取值undefined从现在开始,您对users 所做的更改会影响hasAccess中存储的值。如果{{1}如果是一个对象,那么users会引用该对象,修改该对象将反映在hasAccess中,但它是一个原始值:hasAccess。因此undefined的进一步更改对此没有影响。

为了使更改继续进行,您的第一个测试可以通过users数组进入该字段。

以下是如何做到这一点的说明。我使用hasAccess

模拟了异步流程
setTimeout