如何使用nock.js添加带有GET请求的参数

时间:2018-03-17 20:13:30

标签: javascript node.js api testing nock

我正在尝试测试我的API路由是否正在使用nock.js来模拟url请求。

我的路由文件按照以下逻辑路由:

app.get('/api/study/load/:id', abc.loadStudy );

' loadStudy' ' abc.js'中的方法用于处理以下特定的GET请求。因此,来自浏览器的任何GET请求都有一个' params'密钥与' id'替换':id'的参数在URL中。但是,当我尝试使用nock.js来模拟这个GET请求时,我无法通过这个“id”#39;请求中的参数。

var abc = require('G:\\project\\abc.js');
var nock = require('nock');

var api = nock("http://localhost:3002")
          .get("/api/test/load/1")
          .reply(200, abc.loadStudy);

request({ url : 'http://localhost:3002/api/study/load/1', method: 'GET', params: {id : 1}}, function(error, response, body) { console.log(body);} ); 

我的方法使用' params'随请求发送的密钥,我无法模拟。在以下代码中打印' req' 只需提供' / api / test / load / 1' 。如何将' params' 添加到GET请求中?

loadStudy = function(req, res) {
    console.log(req);
    var id = req.params.id;
};

3 个答案:

答案 0 :(得分:2)

我只是遇到了类似的问题,并尝试了Sunil的答案。事实证明,您要做的就是提供要匹配的查询对象,而不是具有params属性的对象。 我正在使用nock版本11.7.2

const scope = nock(urls.baseURL)
     .get(routes.someRoute)
     .query({ hello: 'world' })
     .reply(200);

答案 1 :(得分:0)

根据official docs,您可以通过

指定查询字符串
var api = nock("http://localhost:3002")
      .get("/api/test/load/1")
      .query({params: {id : 1}})
      .reply(200, abc.loadStudy);

希望它有所帮助。
如果有任何疑问,请回复。

答案 2 :(得分:0)

为通用网址解决此问题的另一种方法是使用regex:

class Program
{

    static void Main(string[] args)
    {
        var ba = new BankAccount(10.00, "Bob", 123456);

        ReadDetails(ba);

        var newName = ba.UpdateAccountHolderName("Frank");
        Console.WriteLine("New Name: " + newName);

        ReadDetails(ba);
    }

    static void ReadDetails(BankAccount ba)
    {
        Console.WriteLine("Balance: " + ba.Balance + ", Name: " + ba.AccountHolderName + ", Number: " + ba.AccountNumber);
        Console.ReadLine();
    }
}