代码之家  ›  专栏  ›  技术社区  ›  nikksan

NodeJS模拟第三方服务

  •  0
  • nikksan  · 技术社区  · 7 年前

    我有一个示例端点,当一个请求提交给它时,我会向第三方服务执行另一个请求,结果有时会出现故障。我想模拟这个服务的故障,这样我的测试就可以相关了。 下面是一些示例代码

    it('should handle malfunctional 3rd party service', done => {
      Frisby.post(Endpoints.randomEndpoint, {
        email: 'johndoe@gmail.com',
        firstName: 'John',
        lastName: 'Doe'
      })
      .expect('status', 400)
      .expect('jsonTypes', Common.Types.ErrorModel)
      .done(done);
    });
    

    在我的服务器端,我有一个类似。。

    app.post('randomEndpoint', (req, res) => {
      request('http://3rdpaty.com/api')
        .then(data => {
          res.send(200);
        })
        .catch(err => {
          res.send(500);
        })
    })
    

    我的目标是确认第三方服务的回应。有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Enthusiastic Developer    7 年前

    您可以使用 nock library

    nock('http://3rdpaty.com/')')
     .post('/api/', {
       email: 'johndoe@gmail.com',
       firstName: 'John',
       lastName: 'Doe'
     })
     .reply(400, { id: '123ABC' });
    
        2
  •  3
  •   rajabzz    7 年前

    你可以运行 mock server

    退房 json-server mockserver 有关如何在node.js中运行模拟服务器的说明文档

    模拟服务器 ):

    var http    =  require('http');
    var mockserver  =  require('mockserver');
    
    http.createServer(mockserver('mocks')).listen(9001);
    

    将文件添加到 mocks/api 目录,命名 GET.mock (用于 GET 请求)或 POST.mock POST 请求)并指定API调用的结果:

    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    
    {
       "Accept-Language": "en-US,en;q=0.8",
       "Host": "headers.jsontest.com",
       "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3",
       "Accept": 
       "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    }
    

    在运行测试时更改第三方服务器的URL(使用模拟服务器的端口):

    app.post('randomEndpoint', (req, res) => {
      request('http://127.0.0.1:9001/api')
        .then(data => {
          res.send(200);
        })
        .catch(err => {
          res.send(500);
        })
    })
    

    更改第三方URL的更好的解决方案是指定 TEST 使用env变量的环境,并使用基于程序运行环境的配置文件获取URL。e、 g.如果你的程序正在运行 Production http://3rdpaty.com/api 但是如果你的程序正在运行 测试 环境,则URL必须是 http://127.0.0.1:9001/api