Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    William Lightning
    @fuel-wlightning
    ended up instead of using stub, wrapping a small function in a spy.
    Robert Main
    @robertmain
    Hey folks
    Scott Stern
    @sstern6

    Question, when you have a constructor.

    const Test = function() {
      this.testFunc = function () {}
    }
    `

    I have been trying to stub this.testFunc by sinon.stub(Test.prototype, 'testFunc').returns([]);

    But this isnt working, any ideas?

    i see in the docs there are sinon.createStubInstance but i was trying to just use sinon.stub
    Brad Compton (he/him)
    @Bradcomp
    You can instantiate an Object and stub out the method:
    const test = new Test();
    sinon.stub(test, "testFunc")
    Otherwise createStubbedInstance(Test, {testFunc: sinon.stub().returns([])})
    Scott Stern
    @sstern6
    ok perfect
    thank you
    wasnt sure if stubbing the instance was a bad idea
    thanks!
    Phred
    @fearphage

    This might be nicer -

      it.only('MessageController calls Messages.Query - returns null', async () => {
        const mockMessages = {
          query: sinon.stub().returns({
            has: sinon.stub().returns({
              with: sinon.stub().returns({
                fetch: sinon.stub().returns({
                  toJSON: sinon.stub().returns('validJSON')
                })
              })
            })
          })
        }
        const SUT = new MessageController(mockMessages)
        // Act
        let result = await SUT.index({request: null, view: {render: sinon.stub()}})
        // Assert
        expect(mockMessages.query.calledOnce).to.equal(true)
        expect(mockMessages.query().has.calledOnce).to.equal(true)
        expect(mockMessages.query().has.getCall(0).args[0]).to.equal('messagedeliveryrecordsMessageId')
        expect(mockMessages.query().has().with.calledOnce).to.equal(true)
        expect(mockMessages.query().has().with.getCall(0).args[0]).to.equal('messagedeliveryrecordsMessageId')

    This syntax in the assertions is too complex for my taste. I would make the setup more complex, but the tests would be simplified.

    beforeEach(function() {
      this.toJSONStub = sinon.stub();
      this.fetchStub = sinon.stub().returns(this.toJSONStub);
      this.withStub = sinon.stub().returns(this.fetchStub);
      ...
      this.queryStub = sinon.stub().returns(this.hasStub);
      this.mockMessages = { query:  this.queryStub };
    });
    
    it('should do a thing', function() {
      triggerTestCase(this.mockMessages);
    
      // which simplifies the assertions
      assert.calledOnce(this.queryStub);
      ...
      assert.calledOnce(this.toJSONStub);
    });
    Clite Tailor
    @clitetailor
    How Sinon homepage was generated? Is there any tool because i love the homepage style and really want to make a variant of it on my own repo! :/
    Clite Tailor
    @clitetailor
    Okey, i found it. Sinon is great!
    Nephtali Rodriguez
    @nrodriguez
    Hi All. I'm attempting to use calledWithMatch but it seems that still only does a fuzzy compare. Is there any way I can do an exact object to object comparison so that if the value of one of the keys is different it returns false?
    Joakim Bajoul Kakaei
    @Todai88
    Is this community still active?
    Lars Gyrup Brink Nielsen
    @LayZeeDK
    Not very much.
    Sasha Boginsky
    @sashadev-sky
    hey! Does anyone here have experience writing tests in sinon with Ruby on Rails and could help me with some questions I have
    Richard Annand
    @rj175
    Not sure if this channel is still active but I am looking for some help with the sinon.stub method
    Derek W. S. Gray
    @derekwsgray
    @rj175 what's the question?
    Brad Compton (he/him)
    @Bradcomp
    I lurk still too
    Arthur Neuman
    @mets11rap
    test('loopFunction', async (t) => {
      function loopFunction () {
        return true
      }
    
      const spy = sinon.spy(loopFunction)
    
      const agent = new Agent({
        Eris: PDiscord,
        agentOptions: {
          loopFunction,
          loopInterval: 100
        }
      })
    
      await delay(200)
    
      loopFunction() // debug
      console.log(spy.callCount)
      t.true(spy.calledTwice)
    
      return agent
    })
    console.log(spy.callCount) returns 0. Why?
    Derek W. S. Gray
    @derekwsgray
    @mets11rap You didn't call the spy
    The spy is a new function
    You should be passing spy in your agentOptions, not loopFunction
    Babita-Sandooja
    @Babita-Sandooja

    Hi
    Can someone please help me with below prob:
    I need to stub xyz function
    here is my source file:

    module.exports = (() => { 'use strict'; return ((browser) => { const abc = (duration = constants.SHORT_WAIT) => { console.log('in source : ', xyz()); if (xyz()) { browser.pause(duration); } }; return { abc, xyz }; }); })();

    I stubbed it in test file and showing correct value.
    But in source file, it's not giving stubbed value

    Derek W. S. Gray
    @derekwsgray
    @Babita-Sandooja I don't understand the question.
    Babita-Sandooja
    @Babita-Sandooja

    I think this stack overflow post explains it: https://stackoverflow.com/questions/35162659/sinon-function-stubbing-how-to-call-own-function-inside-module

    solution they suggested is to refactor the module itself..
    is there some other way as well?

    I think rewire but haven't used it before..
    Brad Compton (he/him)
    @Bradcomp
    Rewire probably won't work because you aren't stubbing the top level function. Is it possible to stub out the whole module, returning the stubbed methods?
    Babita-Sandooja
    @Babita-Sandooja
    I need to test 1 method in that module.. so stubbing whole module :thought_balloon:
    I don't think that's an option?
    Derek W. S. Gray
    @derekwsgray
    sinon.replace ?
    Babita-Sandooja
    @Babita-Sandooja
    oh.. so it would replace in the module also
    Derek W. S. Gray
    @derekwsgray
    yes
    declare the stub, then use .replace(module, theStub)
    Babita-Sandooja
    @Babita-Sandooja
    cool.. Let me try with this :thumbsup:
    Babita-Sandooja
    @Babita-Sandooja
    No, doesn't seem to work
    var fake = sinon.fake.returns(true); sinon.replace(sourceFile, 'xyz', fake);
    when I do console.log(xyz()), It's saying xyz is not defined
    when I do sourceFile.xyz() It's giving true
    but gives false in source file where it's just xyz()
    Derek W. S. Gray
    @derekwsgray
    can you paste your module in a formatted code block
    Babita-Sandooja
    @Babita-Sandooja
    Just FYI, code refactoring as suggested in stack overflow link worked!
    Derek W. S. Gray
    @derekwsgray
    Oh, I thought that wasn't an option - yes by all means, refactor!
    Babita-Sandooja
    @Babita-Sandooja
    Derek W. S. Gray
    @derekwsgray
    Encouraging refactors is a large part of writing unit tests anyway
    Babita-Sandooja
    @Babita-Sandooja
    @derekwsgray PR is not approved yet though..
    so you think that refactor is better? like how?
    I did it just to make it work.. but not sure how it's better than what I had already!
    Derek W. S. Gray
    @derekwsgray
    In that SO example, the function has already been assigned. It can't be replaced
    Babita-Sandooja
    @Babita-Sandooja
    ya.. same seemed to be the issue with me
    but we have sinon.replace :thought_balloon:
    even that can't override?
    Derek W. S. Gray
    @derekwsgray
    But you aren't replacing anything
    the original function has been assigned.