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包装。