我是CoffeeScript和Jasmine的初学者。起初,我尝试使用以下代码传递测试:
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
是的,此代码通过了测试。但我有一个问题,前一个代码比后一个代码更自然。我不知道如何确定这个问题。谢谢你的帮助。
答案 0 :(得分:2)
这是前后增量之间的基本区别。 @count++
将返回@count
的值并在之后递增。 ++@count
将首先递增它并返回新值。如果您使用@count++
,那就是您的测试失败的原因。有关increment and decrement operators的更多信息。
答案 1 :(得分:1)
如果您选择坚持增量后,您可以将代码更改为以下内容以更清楚地了解返回值
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)
)
)
但是你不希望增量和减量的返回值反映@count的更新值