Javascript 有没有更好的方法来定义摩卡咖啡中的变量;在'之前;呼叫
我想设置一次请求,然后在多个测试中使用它。这是我能想到的最好的方法,但是必须声明Javascript 有没有更好的方法来定义摩卡咖啡中的变量;在'之前;呼叫,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,我想设置一次请求,然后在多个测试中使用它。这是我能想到的最好的方法,但是必须声明reqmutable才能在外部范围内使用,这似乎很奇怪 description('GET/password',()=>{ 请求 之前(()=>{ req=chai.request(app.get)(“/password”) 返回请求 }) 它('应该获得密码页',()=>{ 返回req.then(res=>res.should.have.status(200)) }) 描述('密码页',()=>{ 它('应该呈现HT
req
mutable才能在外部范围内使用,这似乎很奇怪
description('GET/password',()=>{
请求
之前(()=>{
req=chai.request(app.get)(“/password”)
返回请求
})
它('应该获得密码页',()=>{
返回req.then(res=>res.should.have.status(200))
})
描述('密码页',()=>{
它('应该呈现HTML',()=>{
return req.then(res=>res.should.be.html)
})
})
})
我希望我能像这样做
const req=before(()=>{
返回chai.request(app.get('password'))
})
。。。但是,before()
似乎不返回其回调中返回的值
有更好(更“优雅”)的方法吗?根据我以前的经验,我通常将响应存储在一个变量中,然后在每次测试中,我访问该变量。似乎您的案例只关心响应,因此下面的解决方案可能适用
description('GET/password',()=>{
let response;//创建一个变量
之前(()=>{
return.request(app.get('/password')//在此处添加'return',表示承诺
。然后(res=>{
response=res;//存储从api到变量的响应
})
})
它('应该获得密码页',()=>{
响应.应具有.状态(200);
})
描述('密码页',()=>{
它('应该呈现HTML',()=>{
response.should.be.html
})
})
})
在我看来,将变量设置为可变的并不奇怪
希望它有帮助您可以简单地使用返回承诺的函数:
describe('GET /password', () => {
function getPassword () {
return chai.request(app).get('/password')
}
it('should get the password page', () => {
return getPassword()
.then(res => res.should.have.status(200))
.catch(err => err.should.not.exist)
})
describe('The password page', () => {
it('should render HTML', () => {
return getPassword()
.then(res => res.should.be.html)
.catch(err => err.should.not.exist)
})
})
})
我发现使用函数的可读性也比使用之前的
要高得多,这在第一眼看不到。我认为对于异步get调用,您必须使用before()函数中的done回调。。这将确保在执行任何测试用例之前完成api req并将结果存储在变量中。@damitj07根据我读到的信息,在较新版本的Mocha中,如果您在before()
中返回承诺,则该承诺保证在测试运行之前得到解决。如果我错了,请纠正我。我想,这篇文章是这么说的。也许试着用这种方法测试一下。我喜欢这个解决方案。然而,它提出了两个单独的请求。在这种情况下,这很好,但在其他情况下可能并不理想。也许你可以用生活来解决这个问题。