Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 如何在Mocha测试用例中发送头(';授权';,';承载令牌';)_Javascript_Node.js_Unit Testing_Mocha.js_Chai - Fatal编程技术网

Javascript 如何在Mocha测试用例中发送头(';授权';,';承载令牌';)

Javascript 如何在Mocha测试用例中发送头(';授权';,';承载令牌';),javascript,node.js,unit-testing,mocha.js,chai,Javascript,Node.js,Unit Testing,Mocha.js,Chai,我正在编写一个测试用例来测试我的API。当我尝试测试任何开放的API时,它工作得很好。但当我尝试将授权令牌与API一起发送时,它不起作用。代码如下: 我发送标题的方式是: .set(“授权”、“承载人”+令牌) 这是正确的发送方式吗 我已尝试在Auth中发送授权令牌。但不能得到同样的结果。但当我试着在《邮递员》中消费同样的东西时,效果很好 it(“获取一些随机信息”,函数(完成){ 柴 .request(baseUrl) .get(“/someRandomApi”) .set(“授权”、“持有人

我正在编写一个测试用例来测试我的API。当我尝试测试任何开放的API时,它工作得很好。但当我尝试将授权令牌与API一起发送时,它不起作用。代码如下:

我发送标题的方式是:

.set(“授权”、“承载人”+令牌)

这是正确的发送方式吗

我已尝试在Auth中发送授权令牌。但不能得到同样的结果。但当我试着在《邮递员》中消费同样的东西时,效果很好

it(“获取一些随机信息”,函数(完成){
柴
.request(baseUrl)
.get(“/someRandomApi”)
.set(“授权”、“持有人”+令牌)
.end(函数(err、res){
期望状态(200);
完成();
});
});
在调用
.set()
之后,尝试调用
.get()

it(“获取一些随机信息”,函数(完成){
柴
.request(baseUrl)
.set(“授权”、“承载人”+令牌)//首先设置头
.get(“/someRandomApi”)//然后获取数据
.end(函数(err、res){
期望状态(200);
完成();
});
});

我喜欢用以下方式设置测试:

let baseUrl = 'http://localhost:9090'
let token = 'some_authorization_token'
首先,我将在测试的最顶端,即
use()
部分之后,实例化变量
baseUrl
token

接下来是测试的设置

    it("Get some random Info", function(done) {
       chai.request(baseUrl)
         .get('/someRandomApi')
         .set({ "Authorization": `Bearer ${token}` })
         .then((res) => {
            expect(res).to.have.status(200)
            const body = res.body
            // console.log(body) - not really needed, but I include them as a comment
           done();
         }).catch((err) => done(err))
    });

现在,
.set()
不一定要像我的一样,在您的情况下也可以使用。

chai http具有
auth
功能来发送授权承载令牌

根据上的http代码,可以使用以下方式传递令牌:

.auth(accessToken,{type:'bearer'})

代码如下所示:

it("Get some random Info", function(done) {
   chai.request(baseUrl)
     .get('/someRandomApi')
     .set(token,{ type: 'bearer' }) //token is actual token data
     .then((res) => {
        expect(res).to.have.status(200)
       done();
     }).catch((err) => done(err))
});

令牌是在哪里定义的?它是全局可用的,即使我已经尝试过硬编码令牌。我认为Token没有问题。您可以显示您的
baseUrl
变量吗?这是baseUrl=“”@leelavath。您似乎没有指定端口号。尝试在url中包含服务器正在运行的端口号。还可以尝试在页面的开头包含
http://
url@LeelaVathi您传递给chai.request()的对象是什么?它应该是服务器对象。比如:chai.request(app)或者它应该是本地主机URL。你能把它包含在你的代码中吗?请找到我正在传递的url。它在没有任何授权的情况下工作,这意味着如果我传递一个类似“”的url,那么它工作正常。但是,如果我尝试测试一个需要发送授权和承载令牌的API,我将面临上述问题——上面抛出了一个错误。当标题为
get
然后为
set
时,它对我来说效果很好。它应该始终在请求方法之后,即
set
应该在
get
之后调用