Comments (16)
I can see how this would be helpful. Two things though:
- I would make the syntax
expect(fn).calledWith(this, arg1, arg2).to.throw(...);
- Why not just use
Function.prototype.bind()
(expect(fn.bind(this, arg1, arg2)).to.throw(...)
)?
from code.
about the implem, bind
was the idea ;)
from code.
and indeed, your syntax is even better!! :D
from code.
I personally think it's more readable to do the bind by hand. That way you only have to understand native JavaScript, instead of code
specifics. It might actually be less to type anyway.
However, I'm open to hearing what other people think.
from code.
One problem of bind
is the first argument:
cf hapijs/joi#787 (comment) (by habits I went for null
...).
Beside I don't find it more explicit. I feel it cloud test intent which is more calling the function and getting an error, than binding value.
I would also tend to not put this
in calledWith. Most of the function not really use this
But for sure, allways better to understand native js! :D
from code.
@cjihrig I started working on this. Shall I open a WIP PR to get feedback, and propose a basis for discusstino?
from code.
after first draft and replexion was more thinking about something like:
`expect(fun).call.with().on().to.throw()``
The with
and on
being facultative.
A return(value)
could also be added to check the return eventually. (as I had first wrote test)
from code.
Expect.js had withArgs
:
withArgs: creates anonymous function to call fn with arguments
expect(fn).withArgs(invalid, arg).to.throwException();
How about dropping call
and just using with
? I think it reads quite well:
expect(fn).with(<args>).to.throw();
from code.
@hueniverse thoughts?
from code.
@gergoerdosi Good suggestion, I followed it, adding some aliases.
cf 2f162c2
from code.
Hapi New Year @ALL :)
Has a logical sequel of previous changes I introduced a result
function to call the function and be able to assert on the result.
Was hesitating to add some alias names like return
. Any suggestion is welcome
from code.
The more I think about this, the less I like it. You have to add APIs for calling the function, getting the return result, setting this
, etc. Just seems like a lot of unnecessary complexity when JavaScript gives you everything you need to do this just as simply, if not simpler.
I'm going to go ahead and close this.
from code.
Sure it's just sugar around javascript features.
But are as most of assert already in code! :)
The point of this is to enable writing test in a very succint way.
Without having noise around to define function you don't need.
expect.call(Joi.func().minArity).with(0).to.throw(Error, 'n must be a strict positive integer');
vs
const schemaWithZeroArity = function (){
return Joi.func().minArity(0);
};
expect(schemaWithZeroArity).to.throw(Error, 'n must be a strict positive integer');
With three test like that it's 3 lines instead of 15!!
Beside the asserter capture semantics.
from code.
Just use bind()
and it's still 3 lines.
Another reason I don't like this proposal is that you need to be able to set this
, or else it's incomplete (unless you're dealing with arrow functions, but there is no way to tell that). Just a can of worms that I don't want to open.
Sure it's just sugar around javascript features.
But are as most of assert already in code! :)
To be honest, I wouldn't have accepted some of the existing features like the type checking functions. It's REALLY hard to do that accurately (and getting harder) without dropping down to the C++ layer.
from code.
To be honest, I wouldn't have accepted some of the existing features like the type checking functions. It's REALLY hard to do that accurately (and getting harder) without dropping down to the C++ layer.
That's because it's hard it's better to rely on a library to do this correctly (haence relying on a developer to fight the C++ layer for us :), thanks for that).
From a library user it's a powerful abstraction.
you need to be able to set this, or else it's incomplete (unless you're dealing with arrow functions, but there is no way to tell that). Just a can of worms that I don't want to open.
Are you refering to the on
syntax?
And what king of worms you fear to come out of this?
from code.
This thread has been automatically locked due to inactivity. Please open a new issue for related bugs or questions following the new issue template instructions.
from code.
Related Issues (20)
- Typescript types would be super dope HOT 1
- Use deepFunction flag for deep comparison HOT 1
- Support deep comparison key skipping HOT 1
- Deep comparison includes symbols HOT 1
- expect(<'', [], or {}>).to.only.include('foo') passes HOT 2
- Action required: Greenkeeper could not be activated 🚨 HOT 1
- to.only.include(values) passes with values not in reference HOT 2
- Drop node 8
- Add types
- Assertion with 'equal()' fails HOT 1
- Support only node 12
- Update hoek
- Fix function string in node 13
- The type `.rejects` returns should return a Promise HOT 1
- Type error on .include() HOT 7
- Allow simpler tests for error.code HOT 2
- compilation errors for primitive type assertions HOT 2
- equal(value: T) type should be Loosely<T> when options ignore symbols or properties
- pass parameter to throw
- Incorrect prototype check HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from code.