0

I'm relatively new to Javascript, and was just writing some simple qunit tests. There is a lot of DRY opportunity here, so I was wondering how a JS pro would refactor this:

test("Add time to date (in seconds)", function () {
    var d = new Date(),
        dPlus = new Date(d.getTime())
    dPlus.addSeconds(1)
    ok(d.getTime() + 1000 === dPlus.getTime(), "Passed!")
})

test("Subtract from date (in seconds)", function () {
    var d = new Date(),
        dMinus = new Date(d.getTime())
    dMinus.addSeconds(-1)
    ok(d.getTime() - 1000 === dMinus.getTime(), "Passed!")
})

test("Add 0 to date (in seconds)", function () {
    var d = new Date(),
        dMinus = new Date(d.getTime())
    dMinus.addSeconds(0)
    ok(d.getTime() === dMinus.getTime(), "Passed!")
})

test("Add time to date (in minutes)", function () {
    var d = new Date(),
        dPlus = new Date(d.getTime())
    dPlus.addMinutes(1)
    ok(d.getTime() + (60 * 1000) === dPlus.getTime(), "Passed!")
})

test("Subtract from date (in minutes)", function () {
    var d = new Date(),
        dMinus = new Date(d.getTime())
    dMinus.addMinutes(-1)
    ok(d.getTime() - (60 * 1000) === dMinus.getTime(), "Passed!")
})

test("Add 0 to date (in minutes)", function () {
    var d = new Date(),
        dMinus = new Date(d.getTime())
    dMinus.addMinutes(0)
    ok(d.getTime() === dMinus.getTime(), "Passed!")
})

I suspect I could write a function that takes one parameters for the qty of time units, the function (addSeconds, addMinutes), and either the expected offset or a function to calculate it, just not sure what the idiomatic way to write it would be.

2
  • 1
    This type of question is probably better suited for programmers.stackexchange.com Commented Mar 14, 2014 at 18:26
  • I would move code from first 3 functions to a testSeconds(secondsToAdd) function and code from 2 last functions to testMinutes(minutesToAdd). This would definitely reduce amount of code. Commented Mar 14, 2014 at 18:51

1 Answer 1

1
function testUnits(func, amount, offset) {
    var d = new Date(),
        dMinus = new Date(d.getTime());
    dMinus[func](amount);
    ok(d.getTime() + offset === dMinus.getTime(), "Passed!");
}

test("Subtract from date (in minutes)", function () {
    testUnits('addMinutes', -1, -60000);
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.