我正在尝试测试我的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;
};
答案 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();
}
}