[英]How to make this test pass in Mocha?
我正在使用angular,chai,angularmocks,mocha,karma。 测试输出此错误:
类型错误
map @ [本地代码]
app / main.coffee:30:23 <-app / main.js:23:23
测试/main.spec.coffee:59:20 <-测试/main.spec.js:18:27
assert = chai.assert
expect = chai.expect
describe("The Address Book App", () ->
describe("the proper filter", () ->
proper = null
beforeEach( () ->
module("AddressBook")
inject( ($injector)->
proper = $injector.get("$filter")("proper")
)
)
it("should proper case a string", () ->
expect(proper("ned stark")).to.equal("Ned Stark")
)
)
)
main.coffee
class AddressBook
constructor: ->
return []
class Proper
uppercase: (word) ->
word[0].toUpperCase().concat(word.slice(1))
constructor: () ->
return (name) ->
words = name.toString().split(" ")
return words.map(@uppercase).join(" ")
angular.module('AddressBook', new AddressBook())
.filter('proper', [Proper])
更新
我认为类方法“大写”更适合这种情况,并且在“ main.coffee”中稍有更改即可通过测试。
class AddressBook
constructor: ->
return []
class Proper
@uppercase: (word) ->
word[0].toUpperCase().concat(word.slice(1))
constructor: () ->
return (name) ->
words = name.toString().split(" ")
return words.map(Proper.uppercase).join(" ")
angular.module('AddressBook', new AddressBook())
.filter('proper', [Proper])
但是,如果我真的需要实例方法,该如何通过测试?
这是因为CoffeeScript处理this
关键字的方式。 在构造函数中,您将返回一个函数,但是在该函数内部将访问变量@uppercase
。 在这种情况下,您希望this
关键字(即@
)引用正在构造的对象实例。 但是, this
始终引用在其上调用函数的对象,这种情况下是undefined
。
要解决此问题,只需使用粗箭头,CoffeeScript将按预期设置this
关键字:
class Proper
uppercase: (word) ->
word[0].toUpperCase().concat(word.slice(1))
constructor: () ->
return (name) =>
words = name.toString().split(" ")
return words.map(@uppercase).join(" ")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.