Giter VIP home page Giter VIP logo

Comments (9)

pgte avatar pgte commented on July 21, 2024

I prefer the first option, clearly, thanks for asking :)

No dia 03/02/2012, Γ s 21:22, Ian Young
[email protected]
escreveu:

I noticed that in my tests using nock, if one test failed to fulfill an expectation, subsequent tests that set up the same expectation would fail, because the requests were being hijacked by a lingering intercept from the previous test. I wrote a test that demonstrates:

tap.test("scopes are independent", function(t) {
 var scope1 = nock('http://www.google.com')
   .get('/')
   .reply(200, "Hello World!");
 var scope2 = nock('http://www.google.com')
   .get('/')
   .reply(200, "Hello World!");

 var req = http.request({
     host: "www.google.com"
   , path: '/'
   , port: 80
 }, function(res) {
   res.on('end', function() {
     t.ok(scope1.isDone());
     t.ok(scope2.isDone()); // fails
     t.end();
   });
 });

 req.end();
});

What's your preferred way to fix this?

  • One intercepted request could fulfill expectations from multiple scopes (in other words, the above test would pass without modification).

  • nock.restore() could clear out whatever is hanging around to cause this. Test would change to something like this:

    tap.test("scopes are independent", function(t) {
    var scope1 = nock(/*...*/);
    nock.restore();
    var scope2 = nock(/*...*/);
    
    var req = http.request({
     //...
    }, function(res) {
     res.on('end', function() {
       t.notOk(scope1.isDone());
       t.ok(scope2.isDone());
       t.end();
    });
    });
    req.end();
    });
  • Similar to the previous option, but give the duty to a new method rather than restore.


Reply to this email directly or view it on GitHub:
#30

from nock.

pgte avatar pgte commented on July 21, 2024

Sorry, backtracking here.

There is no way to make the scopes independent, since the app will be making direct calls to the HTTP module, not referencing a scope.
The interceptors are created globally, which means that what you are experiencing is the correct behavior.
There is no way to tell which scope will be caught first, depends on which request fires first.

When using nock I don't do my tests in parallel, which makes debugging stuff like this much easier.

I added some tests for this, which I think is correct behavior:

f8b7366

from nock.

iangreenleaf avatar iangreenleaf commented on July 21, 2024

Is this current behavior the desired behavior or just the expected behavior? I haven't looked closely at the interceptor internals yet, but I imagine we could change it to what I described in the first option - just need to key by a reference to scope object or something.

from nock.

iangreenleaf avatar iangreenleaf commented on July 21, 2024

So right now we're still left with cascading failures from one unsatisfied mock. If nothing else, I'd like to go for the second option, but I'm hoping to get your opinion on the above first.

from nock.

pgte avatar pgte commented on July 21, 2024

Thinking again about this, a nice feature would be to globally clean up all mocks, thinking of

nock.cleanAll();

I'll be working on this.

Sorry for the delay :)

from nock.

pgte avatar pgte commented on July 21, 2024

nock v0.10.1 now supports:

nock.cleanAll() that wipes the mocks that are setup.

please reopen this if it doesn't work for you.

Thanks!

from nock.

iangreenleaf avatar iangreenleaf commented on July 21, 2024

Perfect! Added this to my test setup and it works great.

from nock.

MaerF0x0 avatar MaerF0x0 commented on July 21, 2024

this crushed my productivity today. #253

from nock.

lock avatar lock commented on July 21, 2024

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue and add a reference to this one if it’s related. Thank you!

from nock.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.