Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove withArgs method from behavior #350

Merged
merged 2 commits into from
Nov 20, 2013

Conversation

tf
Copy link
Contributor

@tf tf commented Nov 17, 2013

While writing the documentation (cjohansen/sinon-web#30) for the new onCall method (#244) I've come across an ambiguity in the API. Please consider the following explanation, which I is taken from the commit message of this pull request:

stub.onCall(n).withArgs(...) should not be an alias for
stub.withArgs(...).onCall(n) since it leads to an ambiguous and
possibly surprising api:

stub.onFirstCall()
  .withArgs(1).returns(2)
  .withArgs(2).returns(3);

stub(1); // => 2
stub(2); // => 3

The stub definition seems to imply though that we are only further
distinguishing cases for the first call. It would therefore be
reasonable to expect the second call to return undefined. This is not
the case if the alias removed by this commit is in effect.

Even worse, keeping the alias might lead to clashes in the api once
argument filtering for single calls as implied above shall be added to
the codebase.

We therefore for now throw an error which explains that calling
withArgs on a behavior is not yet supported, deferring the discussion
what it should mean.

stub.onCall(n).withArgs(...) should not be an alias for
stub.withArgs(...).onCall(n) since it leads to an ambiguous and
possibly surprising api:

    stub.onFirstCall()
      .withArgs(1).returns(2)
      .withArgs(2).returns(3);

    stub(1); // => 2
    stub(2); // => 3

The stub definition seems to imply though that we are only further
distinguishing cases for the first call. It would therefore be
reasonable to expect the second call to return undefined. This is not
the case if the alias removed by this commit is in effect.

Even worse, keeping the alias might lead to clashes in the api once
argument filtering for single calls as implied above shall be added to
the codebase.

We therefore for now throw an error which explains that calling
withArgs on a behavior is not yet supported, deferring the discussion
what it should mean.
@mantoni
Copy link
Member

mantoni commented Nov 17, 2013

Agreed. I would even vote for removing the "yet" from the exception message and never add support. Too confusing.

remove "yet" from error message as long as we don't know if this will
ever be supported.
cjohansen added a commit that referenced this pull request Nov 20, 2013
Remove withArgs method from behavior
@cjohansen cjohansen merged commit 416e77f into sinonjs:master Nov 20, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants