Best JavaScript code snippet using sinon
mock-test.js
Source:mock-test.js  
...8var assert = referee.assert;9var refute = referee.refute;10describe("sinonMock", function() {11    it("creates anonymous mock functions", function() {12        var expectation = sinonMock();13        assert.equals(expectation.method, "Anonymous mock");14    });15    it("creates named anonymous mock functions", function() {16        var expectation = sinonMock("functionName");17        assert.equals(expectation.method, "functionName");18    });19    describe(".create", function() {20        it("returns function with expects method", function() {21            var mock = sinonMock.create({});22            assert.isFunction(mock.expects);23        });24        it("throws without object", function() {25            assert.exception(26                function() {27                    sinonMock.create();28                },29                { name: "TypeError" }30            );31        });32    });33    describe(".expects", function() {34        beforeEach(function() {35            this.mock = sinonMock.create({36                someMethod: function() {37                    return;38                }39            });40        });41        it("throws without method", function() {42            var mock = this.mock;43            assert.exception(44                function() {45                    mock.expects();46                },47                { name: "TypeError" }48            );49        });50        it("returns expectation", function() {51            var result = this.mock.expects("someMethod");52            assert.isFunction(result);53            assert.equals(result.method, "someMethod");54        });55        it("throws if expecting a non-existent method", function() {56            var mock = this.mock;57            assert.exception(function() {58                mock.expects("someMethod2");59            });60        });61    });62    describe(".expectation", function() {63        beforeEach(function() {64            this.method = "myMeth";65            this.expectation = sinonExpectation.create(this.method);66        });67        it("creates unnamed expectation", function() {68            var anonMock = sinonExpectation.create();69            anonMock.never();70            assert(anonMock.verify());71        });72        it("uses 'anonymous mock expectation' for unnamed expectation", function() {73            var anonMock = sinonExpectation.create();74            anonMock.once();75            assert.exception(76                function() {77                    anonMock.verify();78                },79                {80                    message: "anonymous mock expectation"81                }82            );83        });84        it("call expectation", function() {85            this.expectation();86            assert.isFunction(this.expectation.invoke);87            assert(this.expectation.called);88        });89        it("is invokable", function() {90            var expectation = this.expectation;91            refute.exception(function() {92                expectation();93            });94        });95        describe(".returns", function() {96            it("returns configured return value", function() {97                var object = {};98                this.expectation.returns(object);99                assert.same(this.expectation(), object);100            });101        });102        describe("call", function() {103            it("is called with correct this value", function() {104                var object = { method: this.expectation };105                object.method();106                assert(this.expectation.calledOn(object));107            });108        });109        describe(".callCount", function() {110            it("onlys be invokable once by default", function() {111                var expectation = this.expectation;112                expectation();113                assert.exception(114                    function() {115                        expectation();116                    },117                    { name: "ExpectationError" }118                );119            });120            it("throw readable error", function() {121                var expectation = this.expectation;122                expectation();123                assert.exception(expectation, {124                    message: "myMeth already called once"125                });126            });127        });128        describe(".callCountNever", function() {129            it("is not callable", function() {130                var expectation = this.expectation;131                expectation.never();132                assert.exception(133                    function() {134                        expectation();135                    },136                    { name: "ExpectationError" }137                );138            });139            it("returns expectation for chaining", function() {140                assert.same(this.expectation.never(), this.expectation);141            });142        });143        describe(".callCountOnce", function() {144            it("allows one call", function() {145                var expectation = this.expectation;146                expectation.once();147                expectation();148                assert.exception(149                    function() {150                        expectation();151                    },152                    { name: "ExpectationError" }153                );154            });155            it("returns expectation for chaining", function() {156                assert.same(this.expectation.once(), this.expectation);157            });158        });159        describe(".callCountTwice", function() {160            it("allows two calls", function() {161                var expectation = this.expectation;162                expectation.twice();163                expectation();164                expectation();165                assert.exception(166                    function() {167                        expectation();168                    },169                    { name: "ExpectationError" }170                );171            });172            it("returns expectation for chaining", function() {173                assert.same(this.expectation.twice(), this.expectation);174            });175        });176        describe(".callCountThrice", function() {177            it("allows three calls", function() {178                var expectation = this.expectation;179                expectation.thrice();180                expectation();181                expectation();182                expectation();183                assert.exception(184                    function() {185                        expectation();186                    },187                    { name: "ExpectationError" }188                );189            });190            it("returns expectation for chaining", function() {191                assert.same(this.expectation.thrice(), this.expectation);192            });193        });194        describe(".callCountExactly", function() {195            it("allows specified number of calls", function() {196                var expectation = this.expectation;197                expectation.exactly(2);198                expectation();199                expectation();200                assert.exception(201                    function() {202                        expectation();203                    },204                    { name: "ExpectationError" }205                );206            });207            it("returns expectation for chaining", function() {208                assert.same(this.expectation.exactly(2), this.expectation);209            });210            it("throws without argument", function() {211                var expectation = this.expectation;212                assert.exception(213                    function() {214                        expectation.exactly();215                    },216                    { name: "TypeError" }217                );218            });219            it("throws without number", function() {220                var expectation = this.expectation;221                assert.exception(222                    function() {223                        expectation.exactly("12");224                    },225                    { name: "TypeError" }226                );227            });228            it("throws with Symbol", function() {229                if (typeof Symbol === "function") {230                    var expectation = this.expectation;231                    assert.exception(232                        function() {233                            expectation.exactly(Symbol());234                        },235                        function(err) {236                            return err.message === "'Symbol()' is not a number";237                        }238                    );239                }240            });241        });242        describe(".atLeast", function() {243            it("throws without argument", function() {244                var expectation = this.expectation;245                assert.exception(246                    function() {247                        expectation.atLeast();248                    },249                    { name: "TypeError" }250                );251            });252            it("throws without number", function() {253                var expectation = this.expectation;254                assert.exception(255                    function() {256                        expectation.atLeast({});257                    },258                    { name: "TypeError" }259                );260            });261            it("throws with Symbol", function() {262                if (typeof Symbol === "function") {263                    var expectation = this.expectation;264                    assert.exception(265                        function() {266                            expectation.atLeast(Symbol());267                        },268                        function(err) {269                            return err.message === "'Symbol()' is not number";270                        }271                    );272                }273            });274            it("returns expectation for chaining", function() {275                assert.same(this.expectation.atLeast(2), this.expectation);276            });277            it("allows any number of calls", function() {278                var expectation = this.expectation;279                expectation.atLeast(2);280                expectation();281                expectation();282                refute.exception(function() {283                    expectation();284                    expectation();285                });286            });287            it("should not be met with too few calls", function() {288                this.expectation.atLeast(2);289                this.expectation();290                assert.isFalse(this.expectation.met());291            });292            it("is met with exact calls", function() {293                this.expectation.atLeast(2);294                this.expectation();295                this.expectation();296                assert(this.expectation.met());297            });298            it("is met with excessive calls", function() {299                this.expectation.atLeast(2);300                this.expectation();301                this.expectation();302                this.expectation();303                assert(this.expectation.met());304            });305            it("should not throw when exceeding at least expectation", function() {306                var obj = {307                    foobar: function() {308                        return;309                    }310                };311                var mock = sinonMock(obj);312                mock.expects("foobar").atLeast(1);313                obj.foobar();314                refute.exception(function() {315                    obj.foobar();316                    mock.verify();317                });318            });319            it("should not throw when exceeding at least expectation and withargs", function() {320                var obj = {321                    foobar: function() {322                        return;323                    }324                };325                var mock = sinonMock(obj);326                mock.expects("foobar").withArgs("arg1");327                mock.expects("foobar")328                    .atLeast(1)329                    .withArgs("arg2");330                obj.foobar("arg1");331                obj.foobar("arg2");332                obj.foobar("arg2");333                assert(mock.verify());334            });335        });336        describe(".atMost", function() {337            it("throws without argument", function() {338                var expectation = this.expectation;339                assert.exception(340                    function() {341                        expectation.atMost();342                    },343                    { name: "TypeError" }344                );345            });346            it("throws without number", function() {347                var expectation = this.expectation;348                assert.exception(349                    function() {350                        expectation.atMost({});351                    },352                    { name: "TypeError" }353                );354            });355            it("throws with Symbol", function() {356                if (typeof Symbol === "function") {357                    var expectation = this.expectation;358                    assert.exception(359                        function() {360                            expectation.atMost(Symbol());361                        },362                        function(err) {363                            return err.message === "'Symbol()' is not number";364                        }365                    );366                }367            });368            it("returns expectation for chaining", function() {369                assert.same(this.expectation.atMost(2), this.expectation);370            });371            it("allows fewer calls", function() {372                var expectation = this.expectation;373                expectation.atMost(2);374                refute.exception(function() {375                    expectation();376                });377            });378            it("is met with fewer calls", function() {379                this.expectation.atMost(2);380                this.expectation();381                assert(this.expectation.met());382            });383            it("is met with exact calls", function() {384                this.expectation.atMost(2);385                this.expectation();386                this.expectation();387                assert(this.expectation.met());388            });389            it("should not be met with excessive calls", function() {390                var expectation = this.expectation;391                this.expectation.atMost(2);392                this.expectation();393                this.expectation();394                assert.exception(395                    function() {396                        expectation();397                    },398                    { name: "ExpectationError" }399                );400                assert.isFalse(this.expectation.met());401            });402        });403        describe(".atMostAndAtLeast", function() {404            beforeEach(function() {405                this.expectation.atLeast(2);406                this.expectation.atMost(3);407            });408            it("should not be met with too few calls", function() {409                this.expectation();410                assert.isFalse(this.expectation.met());411            });412            it("is met with minimum calls", function() {413                this.expectation();414                this.expectation();415                assert(this.expectation.met());416            });417            it("is met with maximum calls", function() {418                this.expectation();419                this.expectation();420                this.expectation();421                assert(this.expectation.met());422            });423            it("throws with excessive calls", function() {424                var expectation = this.expectation;425                expectation();426                expectation();427                expectation();428                assert.exception(429                    function() {430                        expectation();431                    },432                    { name: "ExpectationError" }433                );434            });435        });436        describe(".met", function() {437            it("should not be met when not called enough times", function() {438                assert.isFalse(this.expectation.met());439            });440            it("is met when called enough times", function() {441                this.expectation();442                assert(this.expectation.met());443            });444            it("should not be met when called too many times", function() {445                this.expectation();446                assert.exception(this.expectation);447                assert.isFalse(this.expectation.met());448            });449        });450        describe(".withArgs", function() {451            var expectedException = function(name) {452                return {453                    test: function(actual) {454                        return actual.name === name;455                    },456                    toString: function() {457                        return name;458                    }459                };460            };461            it("returns expectation for chaining", function() {462                assert.same(this.expectation.withArgs(1), this.expectation);463            });464            it("accepts call with expected args", function() {465                this.expectation.withArgs(1, 2, 3);466                this.expectation(1, 2, 3);467                assert(this.expectation.met());468            });469            it("throws when called without args", function() {470                var expectation = this.expectation;471                expectation.withArgs(1, 2, 3);472                assert.exception(473                    function() {474                        expectation();475                    },476                    { name: "ExpectationError" }477                );478            });479            it("throws when called with too few args", function() {480                var expectation = this.expectation;481                expectation.withArgs(1, 2, 3);482                assert.exception(483                    function() {484                        expectation(1, 2);485                    },486                    { name: "ExpectationError" }487                );488            });489            it("throws when called with wrong args", function() {490                var expectation = this.expectation;491                expectation.withArgs(1, 2, 3);492                assert.exception(function() {493                    expectation(2, 2, 3);494                }, expectedException("ExpectationError"));495            });496            it("allows excessive args", function() {497                var expectation = this.expectation;498                expectation.withArgs(1, 2, 3);499                refute.exception(function() {500                    expectation(1, 2, 3, 4);501                });502            });503            it("calls accept with no args", function() {504                this.expectation.withArgs();505                this.expectation();506                assert(this.expectation.met());507            });508            it("allows no args called with excessive args", function() {509                var expectation = this.expectation;510                expectation.withArgs();511                refute.exception(function() {512                    expectation(1, 2, 3);513                });514            });515            it("works with sinon matchers", function() {516                this.expectation.withArgs(match.number, match.string, match.func);517                this.expectation(1, "test", function() {518                    return;519                });520                assert(this.expectation.met());521            });522            it("throws when sinon matchers fail", function() {523                var expectation = this.expectation;524                this.expectation.withArgs(match.number, match.string, match.func);525                assert.exception(526                    function() {527                        expectation(1, 2, 3);528                    },529                    { name: "ExpectationError" }530                );531            });532            it("should not throw when expectation withArgs using matcher", function() {533                var obj = {534                    foobar: function() {535                        return;536                    }537                };538                var mock = sinonMock(obj);539                mock.expects("foobar").withArgs(match.string);540                refute.exception(function() {541                    obj.foobar("arg1");542                });543            });544        });545        describe(".withExactArgs", function() {546            it("returns expectation for chaining", function() {547                assert.same(this.expectation.withExactArgs(1), this.expectation);548            });549            it("accepts call with expected args", function() {550                this.expectation.withExactArgs(1, 2, 3);551                this.expectation(1, 2, 3);552                assert(this.expectation.met());553            });554            it("throws when called without args", function() {555                var expectation = this.expectation;556                expectation.withExactArgs(1, 2, 3);557                assert.exception(558                    function() {559                        expectation();560                    },561                    { name: "ExpectationError" }562                );563            });564            it("throws when called with too few args", function() {565                var expectation = this.expectation;566                expectation.withExactArgs(1, 2, 3);567                assert.exception(568                    function() {569                        expectation(1, 2);570                    },571                    { name: "ExpectationError" }572                );573            });574            it("throws when called with wrong args", function() {575                var expectation = this.expectation;576                expectation.withExactArgs(1, 2, 3);577                assert.exception(578                    function() {579                        expectation(2, 2, 3);580                    },581                    { name: "ExpectationError" }582                );583            });584            it("should not allow excessive args", function() {585                var expectation = this.expectation;586                expectation.withExactArgs(1, 2, 3);587                assert.exception(588                    function() {589                        expectation(1, 2, 3, 4);590                    },591                    { name: "ExpectationError" }592                );593            });594            it("accepts call with no expected args", function() {595                this.expectation.withExactArgs();596                this.expectation();597                assert(this.expectation.met());598            });599            it("does not allow excessive args with no expected args", function() {600                var expectation = this.expectation;601                expectation.withExactArgs();602                assert.exception(603                    function() {604                        expectation(1, 2, 3);605                    },606                    { name: "ExpectationError" }607                );608            });609        });610        describe(".on", function() {611            it("returns expectation for chaining", function() {612                assert.same(this.expectation.on({}), this.expectation);613            });614            it("allows calls on object", function() {615                this.expectation.on(this);616                this.expectation();617                assert(this.expectation.met());618            });619            it("throws if called on wrong object", function() {620                var expectation = this.expectation;621                expectation.on({});622                assert.exception(623                    function() {624                        expectation();625                    },626                    { name: "ExpectationError" }627                );628            });629            it("throws if calls on wrong Symbol", function() {630                if (typeof Symbol === "function") {631                    var expectation = sinonExpectation.create("method");632                    expectation.on(Symbol());633                    assert.exception(634                        function() {635                            expectation.call(Symbol());636                        },637                        function(err) {638                            return err.message === "method called with Symbol() as thisValue, expected Symbol()";639                        }640                    );641                }642            });643        });644        describe(".verify", function() {645            it("pass if met", function() {646                sinonStub(sinonExpectation, "pass");647                var expectation = this.expectation;648                expectation();649                expectation.verify();650                assert.equals(sinonExpectation.pass.callCount, 1);651                sinonExpectation.pass.restore();652            });653            it("throws if not called enough times", function() {654                var expectation = this.expectation;655                assert.exception(656                    function() {657                        expectation.verify();658                    },659                    { name: "ExpectationError" }660                );661            });662            it("throws readable error", function() {663                var expectation = this.expectation;664                assert.exception(665                    function() {666                        expectation.verify();667                    },668                    {669                        message: "Expected myMeth([...]) once (never called)"670                    }671                );672            });673        });674    });675    describe(".verify", function() {676        beforeEach(function() {677            this.method = function() {678                return;679            };680            this.object = { method: this.method };681            this.mock = sinonMock.create(this.object);682        });683        it("restores mocks", function() {684            this.object.method();685            this.object.method.call(this.thisValue);686            this.mock.verify();687            assert.same(this.object.method, this.method);688        });689        it("passes verified mocks", function() {690            sinonStub(sinonExpectation, "pass");691            this.mock.expects("method").once();692            this.object.method();693            this.mock.verify();694            assert.equals(sinonExpectation.pass.callCount, 1);695            sinonExpectation.pass.restore();696        });697        it("restores if not met", function() {698            var mock = this.mock;699            mock.expects("method");700            assert.exception(701                function() {702                    mock.verify();703                },704                { name: "ExpectationError" }705            );706            assert.same(this.object.method, this.method);707        });708        it("includes all calls in error message", function() {709            var mock = this.mock;710            mock.expects("method").thrice();711            mock.expects("method")712                .once()713                .withArgs(42);714            assert.exception(715                function() {716                    mock.verify();717                },718                {719                    message:720                        "Expected method([...]) thrice (never called)\n" +721                        "Expected method(42[, ...]) once (never called)"722                }723            );724        });725        it("includes exact expected arguments in error message", function() {726            var mock = this.mock;727            mock.expects("method")728                .once()729                .withExactArgs(42);730            assert.exception(731                function() {732                    mock.verify();733                },734                {735                    message: "Expected method(42) once (never called)"736                }737            );738        });739        it("includes received call count in error message", function() {740            var mock = this.mock;741            mock.expects("method")742                .thrice()743                .withExactArgs(42);744            this.object.method(42);745            assert.exception(746                function() {747                    mock.verify();748                },749                {750                    message: "Expected method(42) thrice (called once)"751                }752            );753        });754        it("includes unexpected calls in error message", function() {755            var mock = this.mock;756            var object = this.object;757            mock.expects("method")758                .thrice()759                .withExactArgs(42);760            assert.exception(761                function() {762                    object.method();763                },764                {765                    message: "Unexpected call: method()\n    Expected method(42) thrice (never called)"766                }767            );768        });769        it("includes met expectations in error message", function() {770            var mock = this.mock;771            var object = this.object;772            mock.expects("method")773                .once()774                .withArgs(1);775            mock.expects("method")776                .thrice()777                .withExactArgs(42);778            object.method(1);779            assert.exception(780                function() {781                    object.method();782                },783                {784                    message:785                        "Unexpected call: method()\n" +786                        "    Expectation met: method(1[, ...]) once\n" +787                        "    Expected method(42) thrice (never called)"788                }789            );790        });791        it("includes met expectations in error message from verify", function() {792            var mock = this.mock;793            mock.expects("method")794                .once()795                .withArgs(1);796            mock.expects("method")797                .thrice()798                .withExactArgs(42);799            this.object.method(1);800            assert.exception(801                function() {802                    mock.verify();803                },804                {805                    message: "Expected method(42) thrice (never called)\nExpectation met: method(1[, ...]) once"806                }807            );808        });809        it("reports min calls in error message", function() {810            var mock = this.mock;811            mock.expects("method").atLeast(1);812            assert.exception(813                function() {814                    mock.verify();815                },816                {817                    message: "Expected method([...]) at least once (never called)"818                }819            );820        });821        it("reports max calls in error message", function() {822            var mock = this.mock;823            var object = this.object;824            mock.expects("method").atMost(2);825            assert.exception(826                function() {827                    object.method();828                    object.method();829                    object.method();830                },831                {832                    message: "Unexpected call: method()\n    Expectation met: method([...]) at most twice"833                }834            );835        });836        it("reports min calls in met expectation", function() {837            var mock = this.mock;838            var object = this.object;839            mock.expects("method").atLeast(1);840            mock.expects("method")841                .withArgs(2)842                .once();843            assert.exception(844                function() {845                    object.method();846                    object.method(2);847                    object.method(2);848                },849                {850                    message:851                        "Unexpected call: method(2)\n" +852                        "    Expectation met: method([...]) at least once\n" +853                        "    Expectation met: method(2[, ...]) once"854                }855            );856        });857        it("reports max and min calls in error messages", function() {858            var mock = this.mock;859            mock.expects("method")860                .atLeast(1)861                .atMost(2);862            assert.exception(863                function() {864                    mock.verify();865                },866                {867                    message: "Expected method([...]) at least once and at most twice (never called)"868                }869            );870        });871        it("fails even if the original expectation exception was caught", function() {872            var mock = this.mock;873            var object = this.object;874            mock.expects("method").once();875            object.method();876            assert.exception(function() {877                object.method();878            });879            assert.exception(880                function() {881                    mock.verify();882                },883                { name: "ExpectationError" }884            );885        });886        it("does not call pass if no expectations", function() {887            var pass = sinonStub(sinonExpectation, "pass");888            var mock = this.mock;889            mock.expects("method").never();890            delete mock.expectations;891            mock.verify();892            refute(pass.called, "expectation.pass should not be called");893            pass.restore();894        });895    });896    describe(".usingPromise", function() {897        beforeEach(function() {898            this.method = function() {899                return;900            };901            this.object = { method: this.method };902            this.mock = sinonMock.create(this.object);903        });904        it("must be a function", function() {905            assert.isFunction(this.mock.usingPromise);906        });907        it("must return the mock", function() {908            var mockPromise = {};909            var actual = this.mock.usingPromise(mockPromise);910            assert.same(actual, this.mock);911        });912        it("must set all expectations with mockPromise", function() {913            if (!global.Promise) {914                return this.skip();915            }916            var resolveValue = {};917            var mockPromise = {918                resolve: sinonStub.create().resolves(resolveValue)919            };920            this.mock.usingPromise(mockPromise);921            this.mock.expects("method").resolves({});922            return this.object.method().then(function(action) {923                assert.same(resolveValue, action);924                assert(mockPromise.resolve.calledOnce);925            });926        });927    });928    describe("mock object", function() {929        beforeEach(function() {930            this.method = function() {931                return;932            };933            this.object = { method: this.method };934            this.mock = sinonMock.create(this.object);935        });936        it("mocks object method", function() {937            this.mock.expects("method");938            assert.isFunction(this.object.method);939            refute.same(this.object.method, this.method);940        });941        it("reverts mocked method", function() {942            this.mock.expects("method");943            this.object.method.restore();944            assert.same(this.object.method, this.method);945        });946        it("reverts expectation", function() {947            this.mock.expects("method");948            this.object.method.restore();949            assert.same(this.object.method, this.method);950        });951        it("reverts mock", function() {952            this.mock.expects("method");953            this.mock.restore();954            assert.same(this.object.method, this.method);955        });956        it("verifies mock", function() {957            this.mock.expects("method");958            this.object.method();959            var mock = this.mock;960            refute.exception(function() {961                assert(mock.verify());962            });963        });964        it("verifies mock with unmet expectations", function() {965            this.mock.expects("method");966            var mock = this.mock;967            assert.exception(968                function() {969                    assert(mock.verify());970                },971                { name: "ExpectationError" }972            );973        });974    });975    describe("mock method multiple times", function() {976        beforeEach(function() {977            this.thisValue = {};978            this.method = function() {979                return;980            };981            this.object = { method: this.method };982            this.mock = sinonMock.create(this.object);983            this.mock.expects("method");984            this.mock.expects("method").on(this.thisValue);985        });986        it("queues expectations", function() {987            var object = this.object;988            refute.exception(function() {989                object.method();990            });991        });992        it("starts on next expectation when first is met", function() {993            var object = this.object;994            object.method();995            assert.exception(996                function() {997                    object.method();998                },999                { name: "ExpectationError" }1000            );1001        });1002        it("fails on last expectation", function() {1003            var object = this.object;1004            object.method();1005            object.method.call(this.thisValue);1006            assert.exception(1007                function() {1008                    object.method();1009                },1010                { name: "ExpectationError" }1011            );1012        });1013        it("allows mock calls in any order", function() {1014            var object = {1015                method: function() {1016                    return;1017                }1018            };1019            var mock = sinonMock(object);1020            mock.expects("method")1021                .once()1022                .withArgs(42);1023            mock.expects("method")1024                .twice()1025                .withArgs("Yeah");1026            refute.exception(function() {1027                object.method("Yeah");1028            });1029            refute.exception(function() {1030                object.method(42);1031            });1032            assert.exception(function() {1033                object.method(1);1034            });1035            refute.exception(function() {1036                object.method("Yeah");1037            });1038            assert.exception(function() {1039                object.method(42);1040            });1041        });1042    });1043    describe("mock function", function() {1044        it("returns mock method", function() {1045            var mock = sinonMock();1046            assert.isFunction(mock);1047            assert.isFunction(mock.atLeast);1048            assert.isFunction(mock.verify);1049        });1050        it("returns mock object", function() {1051            var mock = sinonMock({});1052            assert.isObject(mock);1053            assert.isFunction(mock.expects);1054            assert.isFunction(mock.verify);1055        });1056    });1057    describe(".yields", function() {1058        it("invokes only argument as callback", function() {1059            var mock = sinonMock().yields();1060            var spy = sinonSpy();1061            mock(spy);1062            assert(spy.calledOnce);1063            assert.equals(spy.args[0].length, 0);1064        });1065        it("throws understandable error if no callback is passed", function() {1066            var mock = sinonMock().yields();1067            assert.exception(mock, {1068                message: "stub expected to yield, but no callback was passed."1069            });1070        });1071    });...SinonMatcher.js
Source:SinonMatcher.js  
1'use strict';2const isFunction = require('lodash/isFunction');3const create  = require('lodash/create');4const size = require('lodash/size');5const isArray = require('lodash/isArray');6const {TypeSafeMatcher} = require('hamjest');7const getType = require('hamjest/lib/utils/getType');8function SinonMatcher() {9	function isSinonMock(sinonMock) {10		return isFunction(sinonMock) && isArray(sinonMock.args);11	}12	function getCallCount(sinonMock) {13		return sinonMock && size(sinonMock.args) || 0;14	}15	return create(new TypeSafeMatcher(), {16		getCallCount: getCallCount,17		isExpectedType: isSinonMock,18		describeMismatch: function (actual, description) {19			if (!this.isExpectedType(actual)) {20				if (!actual) {21					description.append('was ')22						.appendValue(actual);23					return;24				}25				if (isFunction(actual)) {26					description27                        .append('was a ')28                        .append(getType(actual))29                        .append(' without a mock');30					return;31				}32				description33					.append('was a ')34					.append(getType(actual))35					.append(' (')36					.appendValue(actual)37					.append(')');38			} else {39				return this.describeMismatchSafely(actual, description);40			}41		},42	});43}...Using AI Code Generation
1var sinon = require('sinon');2var chai = require('chai');3var sinonChai = require('sinon-chai');4var expect = chai.expect;5chai.use(sinonChai);6var mock = sinon.mock;7var stub = sinon.stub;8var spy = sinon.spy;9var assert = chai.assert;10var should = chai.should;11var sinonTest = require('sinon-test');12sinon.test = sinonTest.configureTest(sinon);13var test = require('../src/test.js');14describe('Test', function() {15  it('should call the callback', function() {16    var callback = sinon.spy();17    test(callback);18    callback.should.have.been.called;19  });20});21var test = function(callback) {22  callback();23};24module.exports = test;25var sinonTest = require('sinon-test');26sinon.test = sinonTest.configureTest(sinon);27var sinonTest = require('sinon-test');28var chai = require('chai');29var sinonChai = require('sinon-chai');30var expect = chai.expect;31chai.use(sinonChai);32var mock = sinon.mock;33var stub = sinon.stub;34var spy = sinon.spy;35var assert = chai.assert;36var should = chai.should;37sinon.test = sinonTest.configureTest(sinon);38var sinonTest = require('sinon-test');39var chai = require('chai');40var sinonChai = require('sinon-chai');41var expect = chai.expect;42chai.use(sinonChai);43var mock = sinon.mock;44var stub = sinon.stub;45var spy = sinon.spy;46var assert = chai.assert;47var should = chai.should;48sinon.test = sinonTest.configureTest(sinon);Using AI Code Generation
1var sinon = require('sinon');2var sinonMock = sinon.mock();3sinonMock.expects('foo').once().withArgs(42).returns('bar');4sinonMock.verify();5var sinon = require('sinon');6var sinonMock = sinon.mock();7sinonMock.expects('foo').once().withArgs(42).returns('bar');8sinonMock.verify();9var sinon = require('sinon');10var sinonMock = sinon.mock();11sinonMock.expects('foo').once().withArgs(42).returns('bar');12sinonMock.verify();13var sinon = require('sinon');14var sinonMock = sinon.mock();15sinonMock.expects('foo').once().withArgs(42).returns('bar');16sinonMock.verify();17var sinon = require('sinon');18var sinonMock = sinon.mock();19sinonMock.expects('foo').once().withArgs(42).returns('bar');20sinonMock.verify();21var sinon = require('sinon');22var sinonMock = sinon.mock();23sinonMock.expects('foo').once().withArgs(42).returns('bar');24sinonMock.verify();25var sinon = require('sinon');26var sinonMock = sinon.mock();27sinonMock.expects('foo').once().withArgs(42).returns('bar');28sinonMock.verify();29var sinon = require('sinon');30var sinonMock = sinon.mock();31sinonMock.expects('foo').once().withArgs(42).returns('bar');Using AI Code Generation
1var sinonMock = require('sinon-mock')2var sinon = require('sinon')3var request = require('request')4var chai = require('chai')5var chaiAsPromised = require('chai-as-promised')6chai.use(chaiAsPromised)7var sinonMock = sinon.mock(request)8var promise = new Promise(function(resolve, reject) {9  resolve('success')10})11sinonMock.expects('get').returns(promise)12expect(result).to.eventually.equal('success')13sinonMock.verify()14sinonMock.restore()15{16  "dependencies": {17  },18  "devDependencies": {},19  "scripts": {20  },21}Using AI Code Generation
1var sinon = require('sinon');2var sinonMock = sinon.mock();3sinonMock.expects('method').once().withArgs('arg').returns('return value');4sinonMock.method('arg');5sinonMock.verify();6var sinon = require('sinon');7var sinonMock = sinon.mock();8sinonMock.expects('method').once().withArgs('arg').returns('return value');9sinonMock.method('arg');10sinonMock.verify();11var sinon = require('sinon');12var sinonMock = sinon.mock();13sinonMock.expects('method').once().withArgs('arg').returns('return value');14sinonMock.method('arg');15sinonMock.verify();16var sinon = require('sinon');17var sinonMock = sinon.mock();18sinonMock.expects('method').once().withArgs('arg').returns('return value');19sinonMock.method('arg');20sinonMock.verify();21var sinon = require('sinon');22var sinonMock = sinon.mock();23sinonMock.expects('method').once().withArgs('arg').returns('return value');24sinonMock.method('arg');25sinonMock.verify();26var sinon = require('sinon');27var sinonMock = sinon.mock();28sinonMock.expects('method').once().withArgs('arg').returns('return value');29sinonMock.method('arg');30sinonMock.verify();31var sinon = require('sinon');32var sinonMock = sinon.mock();33sinonMock.expects('method').once().withArgs('arg').returns('return value');34sinonMock.method('arg');35sinonMock.verify();36var sinon = require('sinon');37var sinonMock = sinon.mock();38sinonMock.expects('method').once().withArgs('arg').returns('return value');39sinonMock.method('arg');40sinonMock.verify();Using AI Code Generation
1var sinon = require('sinon');2var sinonMock = sinon.mock(obj);3sinonMock.expects('method').once().withArgs('arg').returns('value');4sinonMock.restore();5sinonMock.verify();6var sinon = require('sinon');7var sinonExpectation = sinon.expectation.create('method');8sinonExpectation.once();9sinonExpectation.withArgs('arg');10sinonExpectation.returns('value');11sinonExpectation(obj);12var sinon = require('sinon');13var sinonExpectation = sinon.expectation.create('method');14sinonExpectation.once();15sinonExpectation.withArgs('arg');16sinonExpectation.returns('value');17sinonExpectation(obj);18sinonExpectation.verify();19var sinon = require('sinon');20var sinonExpectation = sinon.expectation.create('method');21sinonExpectation.once();22sinonExpectation.withArgs('arg');23sinonExpectation.returns('value');24sinonExpectation(obj);25sinonExpectation.verify();26sinonExpectation.restore();27var sinon = require('sinon');28var sinonExpectation = sinon.expectation.create('method');29sinonExpectation.once();30sinonExpectation.withArgs('arg');31sinonExpectation.returns('value');32sinonExpectation(obj);33sinonExpectation.verify();34sinonExpectation.restore();35sinonExpectation(obj);36var sinon = require('sinon');37var sinonExpectation = sinon.expectation.create('method');38sinonExpectation.once();39sinonExpectation.withArgs('arg');40sinonExpectation.returns('value');41sinonExpectation(obj);42sinonExpectation.verify();43sinonExpectation.restore();44sinonExpectation(obj);45sinonExpectation.verify();46var sinon = require('sinon');47var sinonExpectation = sinon.expectation.create('method');48sinonExpectation.once();49sinonExpectation.withArgs('arg');50sinonExpectation.returns('Using AI Code Generation
1var sinon = require('sinon');2var sinonMock = require('sinon-mock');3var assert = require('assert');4var mock = sinonMock(sinon);5var obj = {6  method: function() {7    console.log('called method');8  }9};10mock.expects('method').once();11obj.method();12mock.verify();13mock.restore();14assert.ok(mock.verify());Using AI Code Generation
1const sinon = require('sinon');2const assert = require('assert');3const http = require('http');4const sinonMock = sinon.mock(http);5const request = require('request');6const expectedBody = { success: true };7  assert.equal(body, expectedBody);8  sinonMock.verify();9});10{11  "scripts": {12  },13  "dependencies": {14  }15}Using AI Code Generation
1var sinonMock = require('sinon').mock;2var mock = sinonMock(object);3mock.expects('method').once().withArgs(42).returns('hello');4var sinonExpectation = require('sinon').expectation;5var expectation = sinonExpectation.create('method');6expectation.once();7expectation.withArgs(42);8expectation.returns('hello');9expectation(object);10var sinonStub = require('sinon').stub;11var stub = sinonStub(object, 'method', function() {12  return 'hello';13});14var sinonSpy = require('sinon').spy;15var spy = sinonSpy(object, 'method');16var sinonStub = require('sinon').stub;17var stub = sinonStub();18stub.withArgs(42).returns('hello');19var sinonSpy = require('sinon').spy;20var spy = sinonSpy();21spy.withArgs(42);22var sinonStub = require('sinon').stub;23var stub = sinonStub();24stub.withArgs(42).returns('hello');25stub.withArgs(24).returns('world');26var sinonSpy = require('sinon').spy;27var spy = sinonSpy();28spy.withArgs(42);29spy.withArgs(24);30var sinonStub = require('sinon').stub;31var stub = sinonStub();32stub.withArgs(42).returns('hello');33stub.withArgs(24).returns('world');34stub.withArgs(12).returns('foo');35var sinonSpy = require('sinon').spy;36var spy = sinonSpy();37spy.withArgs(42);38spy.withArgs(24);39spy.withArgs(12);Using AI Code Generation
1var assert = require('assert');2var sinon = require('sinon');3var sinonMock = sinon.mock;4var module = require('module');5var moduleMock = sinonMock(module);6var moduleMockObj = moduleMock.expects('method').once().returns('mocked');7var result = module.method();8assert.equal(result, 'mocked');9moduleMock.verify();10moduleMock.restore();11Your name to display (optional):Using AI Code Generation
1var sinonMock = require('sinon');2var test = require('./test');3describe('test', function() {4    it('should return true', function() {5        var m = sinonMock.mock(test);6        m.expects('test').once().returns(true);7        test.test().should.equal(true);8        m.verify();9        m.restore();10    });11});Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
