如何使用nock.js模拟node-webshot请求?

时间:2018-06-19 03:14:05

标签: node.js mocha nock

使用node Webshot在测试期间模拟nock.js发送的请求的正确方法是什么?

我尝试使用代码捕获http://example.com/foo.html作为foo.png的模拟响应,但模拟似乎不起作用。

const nock = require("nock");
const webshot = require("webshot");

describe("mock webshot request", function(){
  this.timeout(20000);
  beforeEach(function(){
    nock("http://example.com").persist().get("/foo.html").reply(200, "<h1>Foo</h1>");
  });

  afterEach(function () {
    nock.cleanAll();
  });

  it("captures mocked response", function(done){
    webshot("http://example.com/foo.html", "foo.png",function(err) {
      nock.isDone();
      if(!err) done();
    });
  });
});

编辑:

解决方案是将模拟的响应主体传递给Webshot而不是url:

webshot("<h1>Foo</h1>", ...

1 个答案:

答案 0 :(得分:1)

Nock期望http请求在同一进程中发生。

注意: node-webshot是PhantonJS的包装器,它在另一个进程中运行。

在您的情况下,Nock在一个进程中设置,但http请求在另一个进程中发生。所以你不能像你当前那样模仿node-webshot完成的http请求。

您需要支持模拟内置于node-webshot的http请求,即如果没有它,则必须将此功能添加到node-webshot