Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更好的方法来定义摩卡咖啡中的变量;在'之前;呼叫_Javascript_Node.js_Mocha.js - Fatal编程技术网

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()
中返回承诺,则该承诺保证在测试运行之前得到解决。如果我错了,请纠正我。我想,这篇文章是这么说的。也许试着用这种方法测试一下。我喜欢这个解决方案。然而,它提出了两个单独的请求。在这种情况下,这很好,但在其他情况下可能并不理想。也许你可以用生活来解决这个问题。