Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Babita-Sandooja
    @Babita-Sandooja
    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.
    you aren't replacing that assignment
    Babita-Sandooja
    @Babita-Sandooja
    hmm.. you mean I am doing it wrong or is it not possible?
    Derek W. S. Gray
    @derekwsgray
    You need the refactor
    Babita-Sandooja
    @Babita-Sandooja
    yeah
    that's the only way to unit test it?
    Derek W. S. Gray
    @derekwsgray
    To "unit test" a unit has to be isolated. Yours isn't.
    Babita-Sandooja
    @Babita-Sandooja
    yup
    Derek W. S. Gray
    @derekwsgray
    the refactor gives you better isolated and testable code. I'd be good to do regardless
    Babita-Sandooja
    @Babita-Sandooja
    yes yes
    Derek W. S. Gray
    @derekwsgray
    easier for future refactoring, dependency-injection etc.
    I use bottle.js for dependency injection.
    Babita-Sandooja
    @Babita-Sandooja
    okay
    I haven't used it ever.. just read about it
    Looks cool
    Thanks for sharing and all your help!
    Derek W. S. Gray
    @derekwsgray
    Looks like SO did the helping here ;)
    Slim Hmidi
    @slim-hmidi
    hello
    Aaron Gray
    @AaronNGray

    trying to test my minimal jQuery replacement library QueryJS. I am trying to test my once/one function, its fine when I use { once: true } but when I have to use removeEventHandler in the intermediate callback I am not able test it due to async problems.

            describe('one()', function () {
                var documentEventSpy;
    
                beforeEach(function(){
                    documentEventSpy = sinon.spy();
                });
    
                it('event should only fire once', function(){
                    var event = new Event('test');
    
                    $(document).one('test', documentEventSpy);
                    document.dispatchEvent(event);
    
                    this.timeout(1000);
    
                    document.dispatchEvent(event);
    
                    this.timeout(1000);
    
                    expect(documentEventSpy.calledOnce).to.be.true;
                });
            });

    Heres my one function

        one<K extends keyof DocumentEventMap>(event: K, listener: EventListener, options:any) {
            var _this = this;
            this.element.addEventListener(event, (evt: Event):void => {
                _this.element.removeEventListener(event, listener, options);
                listener(evt);
            }, options);
        }
    {once: true} works but not on IE apparently
        once<K extends keyof DocumentEventMap>(event: K, listener: EventListener, options:any) {
            options = options || {once: true};
            return this.element.addEventListener(event, listener, options);
        }