Sinon: withArgs sinon.mock рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЕрдЧре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

  • рд╕рд┐рдиреЙрди рд╕рдВрд╕реНрдХрд░рдг: 3.2.1
  • рдкрд░реНрдпрд╛рд╡рд░рдг: рдУрдПрд╕рдПрдХреНрд╕, рдиреЛрдб 7
  • рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдореЛрдЪрд╛, рдПрдордЬреИрдХреНрд╕рди/рдЙрдореНрдореАрдж

рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереА?
рдЬрдм рдореИрдВ рдХрдХреНрд╖рд╛ рдкрд░ рдПрдХ рдирдХрд▓реА рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ withArgs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм withArgs рдХреА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ

рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ


рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛ C рдШреЛрд╖рд┐рдд рдХреА рд╣реИ:

      class C {
        static foo(arg1, arg2) {return 'foo';}
      }

рдореИрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ foo рдкрд░ рдПрдХ рдирдХрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ C :

      it('test withArgs mock', () => {
        let CMock = sinon.mock(C);
        let fooStub = CMock.expects('foo');

        fooStub.withArgs('a', 'b').returns(1);
        fooStub.withArgs('c', 'd').returns(2);

        expect(fooStub('a', 'b')).toEqual(1);
        expect(fooStub('c', 'd')).toEqual(2);

        CMock.restore();
      });

рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ:

рдПрдХреНрд╕рдкреЗрдХреНрдЯреЗрд╢рди рдПрд░рд░: рдлреВ рдХреЛ рдЧрд▓рдд рддрд░реНрдХ рдорд┐рд▓реЗ ["рдП", "рдмреА"], рдЕрдкреЗрдХреНрд╖рд┐рдд ["рд╕реА", "рдбреА"]
Object.fail рдкрд░ (node_modules/sinon/lib/sinon/mock-expectation.js:281:25)
рд╕рдорд╛рд░реЛрд╣ рдореЗрдВред(node_modules/sinon/lib/sinon/mock-expectation.js:182:33)
Array.forEach (рдореВрд▓) рдкрд░
Function.verifyCallAllowed рдкрд░ (node_modules/sinon/lib/sinon/mock-expectation.js:175:27)
Function.invoke рдкрд░ (node_modules/sinon/lib/sinon/mock-expectation.js:78:14)
рдкреНрд░реЙрдХреНрд╕реА рдкрд░ (node_modules/sinon/lib/sinon/spy.js:89:22)

рдЬрдмрдХрд┐ рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

      it('test withArgs stub', () => {
        let fooStub = sinon.stub(C, 'foo');

        fooStub.withArgs('a', 'b').returns(1);
        fooStub.withArgs('c', 'd').returns(2);

        expect(fooStub('a', 'b')).toEqual(1);
        expect(fooStub('c', 'd')).toEqual(2);

        fooStub.restore();
      });

рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:

      it('test one withArgs mock', () => {
        let CMock = sinon.mock(C);
        let fooStub = CMock.expects('foo');

        fooStub.withArgs('a', 'b').returns(1);

        expect(fooStub('a', 'b')).toEqual(1); // ok

        CMock.restore();
      });
      it('test one withArgs mock', () => {
        let CMock = sinon.mock(C);
        let fooStub = CMock.expects('foo');

        fooStub.withArgs('a', 'b').returns(1);

        expect(fooStub('c', 'd')).toEqual(1); // error: foo received wrong arguments ["c", "d"], expected ["a", "b"]

        CMock.restore();
      });

рдорддрд▓рдм рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм withArgs рдХрдИ рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ #1381 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

Bug Medium Help wanted stale

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реАред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

class C {
  static foo(arg1, arg2) {return 'foo';}
}

it('test withArgs mock', () => {
  let CMock = sinon.mock(C);

  CMock.expects('foo').withArgs('a', 'b').returns(1);
  CMock.expects('foo').withArgs('c', 'd').returns(2);

  expect(C.foo('a', 'b')).toEqual(1);
  expect(C.foo('c', 'd')).toEqual(2);

  CMock.restore();
});

рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВ рдФрд░ рдореВрд▓ рдЕрдВрдХ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

  • рдореИрдВ рджреЛ expects рдмрдирд╛рддрд╛ рд╣реВрдВред
  • рдореИрдВ expects рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред

рдорддрд▓рдм, рдпрд╣ рдпрд╛ рддреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

it('test withArgs mock', () => {
  let CMock = sinon.mock(C);

  CMock.expects('foo').withArgs('a', 'b').returns(1);
  let fooStub = CMock.expects('foo').withArgs('c', 'd').returns(2);

  expect(fooStub('a', 'b')).toEqual(1); // Error: foo received wrong arguments ["a", "b"], expected ["c", "d"]
  expect(fooStub('c', 'd')).toEqual(2);

  CMock.restore();
});

рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ?

рд╣рд░ рдмрд╛рд░ expects рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

  • рдПрдХ рдирдИ рдЕрдкреЗрдХреНрд╖рд╛ ( minCalls/maxCalls рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рд╕реНрдЯрдм - рдЬреЛ рд╡реЗ рдЪрд░ рд╣реИрдВ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП once() рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдпрд╣ рдХрд┐ рдпрд╣ рдПрдХ "рд╕реНрдХреЛрдкреНрдб рд╕реНрдЯрдм" рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЕрдиреНрдп expects рдХрдиреЗрдХреНрд╢рди рд╣реИред рдпрд╣ expects рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╣реИред
  • рдЗрд╕реЗ рдЙрдореНрдореАрджреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЗрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ:

  • рдпрджрд┐ рдЖрдк expects рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ expects рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдЧреАред
  • рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯрдм рдХреЛ рдирд╣реАрдВ, рддреЛ рдпрд╣ рд╕рднреА expects рдкрд░ рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ рдФрд░ рдЬреЛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдЙрд╕реЗ рдвреВрдВрдвреЗрдЧрд╛ред рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рддреЛ рд╡рд╣ рдкрд╣рд▓реЗ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ? рдпрд╣ рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдкрд░ expects рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ stub (рдЕрддрд┐рд░рд┐рдХреНрдд minCalls/maxCalls ) рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:

  • stub рдФрд░ mock-expectation рдмреАрдЪ рдЕрдзрд┐рдХ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╣реА рд╣реЛрдЧрд╛ред

рдЕрдм, minCalls/maxCalls рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдЪреВрдВрдХрд┐ рдЕрдм рдХреЗрд╡рд▓ рдПрдХ expectation рд╣реИ,

  • once() , twice() рдЖрджрд┐ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
  let fooStub = CMock.expects('foo').withArgs('a', 'b').returns(1).twice();
  fooStub.withArgs('c', 'd').returns(2).once(); // Does not affect the previous expectation.

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  • once() , twice() рдЖрджрд┐ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВред
  CMock.expects('foo').withArgs('a', 'b').returns(1).twice(); // `twice()` returns `null`, so that one has to call `expects()` again to set expectations for other arguments. 
  CMock.expects('foo').withArgs('c', 'd').returns(2).once();

рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ, рд▓реЗрдХрд┐рди рдЖрдк foo рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд╣реАрдВ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ:

  CMock.expects('foo').withArgs('a', 'b').returns(1).withArgs('c', 'd').returns(2).twice(); // I guess that this should only affect the last `withArgs`?
  • рд╕реНрдкрд╛рдИ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдХ рдирдореВрдирд╛ рд╕рдорд╕реНрдпрд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдореЛрдХреНрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЪреЛрдЯ рдкрд╣реБрдБрдЪрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдХреЛрдб рдХреЛ рд╕реНрд╡рдпрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ - рдЕрдХреНрд╕рд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ :-)

рдореИрдВрдиреЗ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реАред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

class C {
  static foo(arg1, arg2) {return 'foo';}
}

it('test withArgs mock', () => {
  let CMock = sinon.mock(C);

  CMock.expects('foo').withArgs('a', 'b').returns(1);
  CMock.expects('foo').withArgs('c', 'd').returns(2);

  expect(C.foo('a', 'b')).toEqual(1);
  expect(C.foo('c', 'd')).toEqual(2);

  CMock.restore();
});

рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВ рдФрд░ рдореВрд▓ рдЕрдВрдХ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

  • рдореИрдВ рджреЛ expects рдмрдирд╛рддрд╛ рд╣реВрдВред
  • рдореИрдВ expects рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред

рдорддрд▓рдм, рдпрд╣ рдпрд╛ рддреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

it('test withArgs mock', () => {
  let CMock = sinon.mock(C);

  CMock.expects('foo').withArgs('a', 'b').returns(1);
  let fooStub = CMock.expects('foo').withArgs('c', 'd').returns(2);

  expect(fooStub('a', 'b')).toEqual(1); // Error: foo received wrong arguments ["a", "b"], expected ["c", "d"]
  expect(fooStub('c', 'd')).toEqual(2);

  CMock.restore();
});

рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ?

рд╣рд░ рдмрд╛рд░ expects рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

  • рдПрдХ рдирдИ рдЕрдкреЗрдХреНрд╖рд╛ ( minCalls/maxCalls рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рд╕реНрдЯрдм - рдЬреЛ рд╡реЗ рдЪрд░ рд╣реИрдВ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП once() рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдпрд╣ рдХрд┐ рдпрд╣ рдПрдХ "рд╕реНрдХреЛрдкреНрдб рд╕реНрдЯрдм" рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЕрдиреНрдп expects рдХрдиреЗрдХреНрд╢рди рд╣реИред рдпрд╣ expects рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╣реИред
  • рдЗрд╕реЗ рдЙрдореНрдореАрджреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЗрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ:

  • рдпрджрд┐ рдЖрдк expects рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ expects рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдЧреАред
  • рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯрдм рдХреЛ рдирд╣реАрдВ, рддреЛ рдпрд╣ рд╕рднреА expects рдкрд░ рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ рдФрд░ рдЬреЛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдЙрд╕реЗ рдвреВрдВрдвреЗрдЧрд╛ред рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рддреЛ рд╡рд╣ рдкрд╣рд▓реЗ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ? рдпрд╣ рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдкрд░ expects рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ stub (рдЕрддрд┐рд░рд┐рдХреНрдд minCalls/maxCalls ) рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:

  • stub рдФрд░ mock-expectation рдмреАрдЪ рдЕрдзрд┐рдХ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╣реА рд╣реЛрдЧрд╛ред

рдЕрдм, minCalls/maxCalls рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдЪреВрдВрдХрд┐ рдЕрдм рдХреЗрд╡рд▓ рдПрдХ expectation рд╣реИ,

  • once() , twice() рдЖрджрд┐ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
  let fooStub = CMock.expects('foo').withArgs('a', 'b').returns(1).twice();
  fooStub.withArgs('c', 'd').returns(2).once(); // Does not affect the previous expectation.

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  • once() , twice() рдЖрджрд┐ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВред
  CMock.expects('foo').withArgs('a', 'b').returns(1).twice(); // `twice()` returns `null`, so that one has to call `expects()` again to set expectations for other arguments. 
  CMock.expects('foo').withArgs('c', 'd').returns(2).once();

рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ, рд▓реЗрдХрд┐рди рдЖрдк foo рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд╣реАрдВ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ:

  CMock.expects('foo').withArgs('a', 'b').returns(1).withArgs('c', 'd').returns(2).twice(); // I guess that this should only affect the last `withArgs`?
  • рд╕реНрдкрд╛рдИ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kevinburkeshyp picture kevinburkeshyp  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akdor1154 picture akdor1154  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ALeschinsky picture ALeschinsky  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ndhoule picture ndhoule  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fearphage picture fearphage  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ