Coffeescript 中的方法 Class returns 函数而不是字符串
Method in Coffeescript Class returns function instead of string
我只是想调用一个函数 returns 一个 Url 作为动态构建的继承 class 的字符串:
class @Api
DEFAULT_API_VERSION: 'v2'
constructor: ->
@setVersion(@DEFAULT_API_VERSION)
return
setVersion: (version) ->
@version = version if version?
getVersion: ->
@version
baseUrl: ->
"http://api#{@getVersion()}.mysite.com/api/#{@getVersion()}/"
class @ApiArticle extends Api
constructor: ->
super
return
articlesUrl: ->
"#{@baseUrl}news/articles".toString()
这是父 class 中的测试,即 PASSING
it 'provides the baseUrl for Api calls', ->
api = new Api()
expect(api.baseUrl()).toEqual('http://apiv2.mysite.com/api/v2/')
这是我的测试,它 失败
it 'returns all news articles url', ->
new ApiArticle()
url = api_article.articlesUrl()
expect(url).toEqual 'http://apiv2.mysite.com/api/v2/news/articles'
我从这个规范中得到的结果,它应该是一个字符串但是收到这个:
Expected
'function () { return "http://api" + (this.getVersion()) + ".mysite.com/api/" + (this.getVersion()) + "/"; }news/articles'
to equal
'http://apiv2.mysite.com/api/v2/news/articles'.
是不是少了什么?我必须显式渲染/计算吗?
我对 JS 和 Coffee 很陌生。
谢谢!
这里
articlesUrl: ->
"#{@baseUrl}news/articles".toString()
您想在超类中调用方法 baseUrl
,但您只引用了它。因此,函数本身得到 toString
ed,并附加 "news/articles"。这会产生字符串:function () { return "http://api" + (this.getVersion()) + ".mysite.com/api/" + (this.getVersion()) + "/"; }news/articles
,这是您在测试错误中看到的内容。
通过实际调用 baseUrl
来修复它,而不仅仅是引用它:
articlesUrl: ->
"#{@baseUrl()}news/articles".toString()
然后您可以删除无用的 toString
调用。
您可能需要考虑重命名该方法 getBaseUrl
以避免再次犯此错误。
我只是想调用一个函数 returns 一个 Url 作为动态构建的继承 class 的字符串:
class @Api
DEFAULT_API_VERSION: 'v2'
constructor: ->
@setVersion(@DEFAULT_API_VERSION)
return
setVersion: (version) ->
@version = version if version?
getVersion: ->
@version
baseUrl: ->
"http://api#{@getVersion()}.mysite.com/api/#{@getVersion()}/"
class @ApiArticle extends Api
constructor: ->
super
return
articlesUrl: ->
"#{@baseUrl}news/articles".toString()
这是父 class 中的测试,即 PASSING
it 'provides the baseUrl for Api calls', ->
api = new Api()
expect(api.baseUrl()).toEqual('http://apiv2.mysite.com/api/v2/')
这是我的测试,它 失败
it 'returns all news articles url', ->
new ApiArticle()
url = api_article.articlesUrl()
expect(url).toEqual 'http://apiv2.mysite.com/api/v2/news/articles'
我从这个规范中得到的结果,它应该是一个字符串但是收到这个:
Expected
'function () { return "http://api" + (this.getVersion()) + ".mysite.com/api/" + (this.getVersion()) + "/"; }news/articles'
to equal
'http://apiv2.mysite.com/api/v2/news/articles'.
是不是少了什么?我必须显式渲染/计算吗?
我对 JS 和 Coffee 很陌生。
谢谢!
这里
articlesUrl: ->
"#{@baseUrl}news/articles".toString()
您想在超类中调用方法 baseUrl
,但您只引用了它。因此,函数本身得到 toString
ed,并附加 "news/articles"。这会产生字符串:function () { return "http://api" + (this.getVersion()) + ".mysite.com/api/" + (this.getVersion()) + "/"; }news/articles
,这是您在测试错误中看到的内容。
通过实际调用 baseUrl
来修复它,而不仅仅是引用它:
articlesUrl: ->
"#{@baseUrl()}news/articles".toString()
然后您可以删除无用的 toString
调用。
您可能需要考虑重命名该方法 getBaseUrl
以避免再次犯此错误。