JS assessment: A test-driven approach to assessing JS skills
github.com
github.com
What I'm more concerned is the idea that this is apparently structured like an automated test. If you used it that way, then here is a function which would pass the first test file:
fn = function (a, b) {
switch (b) {
case 3: return 2;
case undefined: return 10;
case 2: return '1 3 4'.split(" ");
case 10: return [0, 0, 0, 0, 10];
case 'z': return '1 2 z 3 4'.split(" ");
default: return '1 2 3 4 a b c'.split(" ");
}
};
It was built by just looking at the "expect" calls, finding the input to the function and the output from it, and duplicating that output.That's obviously not what you want to test. You really want to say, "you give me an object, and I'm going to generate a couple random test vectors and make sure you do the right thing with those vectors." You shouldn't hardcode the result, but the right algorithms, so that someone else's solutions can be measured against the right way to do things. And then you need to ask people not to modify the right solutions, but to duplicate them.
Your guess about why I chose something that involves a little bit of setup is right on target, too. Being able to follow the instructions in a readme and get a simple project like this set up is a key skill to have, too.
I agree with drostie that the node requirement is quite a large barrier to entry. A standalone app (no server required) would probably reach a wider audience.
I don't think it's a concern that someone might hardcode the answers. These sort of tests are about challenging yourself, and where's the challenge in cheating?
For anyone interested, I posted my solutions at http://f6design.com/journal/2012/04/15/test-your-javascript-...
My 'partial' solution (and probably the rest too!) could be improved I'm sure. Thanks e2daipi for cluing me in about currying.
1. How some students came up with interesting approaches I wouldn't have initially thought up.
2. How many students wouldn't get the tests to pass. They'd do something part way, which would have looked 'good enough' if I'd just described the problem. But when running via a test runner, it failed.