所以我在使用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 中会有更多对象,因此循环是最好的方法。只是缩短了它。
答案 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