Javascript 测试的增量代码应为“++@count”?

Javascript 测试的增量代码应为“++@count”?,javascript,coffeescript,jasmine,Javascript,Coffeescript,Jasmine,我是咖啡和茉莉花的初学者。首先,我尝试使用以下代码通过测试: class Counter count: 0 constructor: -> @count = 0 increment: -> @count++ decrement: -> @count-- reset: -> @count = 0 root = exports ? this root.Counte

我是咖啡和茉莉花的初学者。首先,我尝试使用以下代码通过测试:

class Counter
    count: 0

    constructor: ->
        @count = 0

    increment: ->
        @count++

    decrement: ->
        @count--

    reset: ->
        @count = 0

root = exports ? this
root.Counter = Counter
茉莉花测试代码如下:

describe("Counter", ->
    counter = new Counter
    it("shold have 0 as a count variable at first", ->
        expect(counter.count).toBe(0)
    )

    describe('increment()', ->
        it("should count up from 0 to 1", ->
            expect(counter.increment()).toBe(1)
        )
    )
)
然后善良的人告诉我代码应该如下:

class Counter
    count: 0

    constructor: ->
        @count = 0

    increment: ->
        ++@count

    decrement: ->
        --@count

    reset: ->
        @count = 0

root = exports ? this
root.Counter = Counter

是的,这段代码通过了测试。但我有一个问题,前一种代码比后一种代码更自然。我不知道如何确定这个问题。感谢您的帮助。

这是增量前后的基本区别@count++将返回@count的值,并随后递增++@count将首先递增并返回新值。如果使用@count++,这就是测试失败的原因。更多信息。

如果选择坚持后期增量,则可以将代码更改为以下内容,以更清楚地了解返回值

class Counter
  count: 0

  constructor: ->
    @count = 0

  increment: ->
    @count++
    @count

  decrement: ->
    @count--
    @count
  reset: ->
    @count = 0

root = exports ? this
root.Counter = Counter
或者您可以将测试更改为:

describe('increment()', ->
  it("should count up from 0 to 1", ->
    expect(counter.count).toBe(0)
    counter.increment()
    expect(counter.count).toBe(1)
  )
)
但是,您不希望increment和decreation的返回值反映@count的更新值

下面是一个可以让差异变得明显的示例:

什么是更自然?如果您只看到一个后增量,那么预增量可能看起来是外来的,但它同样有效。New与您的问题相关,但该counter=新计数器应该用beforeach包装。