Angular 失败:参数不是函数。您正在查找“mapTo()”?(rxjs地图的Karma jasmine问题-速记-获取方法)
我正在尝试使用:Angular 失败:参数不是函数。您正在查找“mapTo()”?(rxjs地图的Karma jasmine问题-速记-获取方法),angular,rxjs,karma-jasmine,Angular,Rxjs,Karma Jasmine,我正在尝试使用:map(this.service.method) 而不是:map((数据)=>this.service.method(数据)) 但因果报应告诉我: 失败:参数不是函数。您正在查找“mapTo()”? 而且mapTo不是我想在那里使用的 我尝试使用的服务方法: get method() { return (data) => { ... } } 编辑: 根据你的评论,我认为问题不在于方法本身。如果问题仅在测试中出现,那么this.service似乎具有实际服务以外的其他
map(this.service.method)
而不是:
map((数据)=>this.service.method(数据))
但因果报应告诉我:
失败:参数不是函数。您正在查找“mapTo()”?
而且
mapTo
不是我想在那里使用的
我尝试使用的服务方法:
get method() {
return (data) => { ... }
}
编辑:
根据你的评论,我认为问题不在于方法本身。如果问题仅在测试中出现,那么this.service
似乎具有实际服务以外的其他值(但不是undefined
,因为错误将是“无法读取未定义的属性方法
”)
旧的不精确答案 恐怕您没有提供服务方法的完整代码。我感觉到里面可能有一个条件,当你实例化
可观察的
时,this.service.method
getter返回null
或未定义的
。原因在于创建操作符时的同步性—在调用映射(this.service.method)
时立即调用返回函数get的getter。只有提供给map
作为参数的函数才会在可观察对象触发时异步调用
如果我是对的,那么你能使这项工作成功的唯一方法就是你刚才提到的方法
map((data) => this.service.method(data))
编辑:
根据你的评论,我认为问题不在于方法本身。如果问题仅在测试中出现,那么this.service
似乎具有实际服务以外的其他值(但不是undefined
,因为错误将是“无法读取未定义的属性方法
”)
旧的不精确答案 恐怕您没有提供服务方法的完整代码。我感觉到里面可能有一个条件,当你实例化
可观察的
时,this.service.method
getter返回null
或未定义的
。原因在于创建操作符时的同步性—在调用映射(this.service.method)
时立即调用返回函数get的getter。只有提供给map
作为参数的函数才会在可观察对象触发时异步调用
如果我是对的,那么你能使这项工作成功的唯一方法就是你刚才提到的方法
map((data) => this.service.method(data))
尝试
map(this.service.method())
也就是说,使用paranethesis添加括号不应该起作用,method
是一个getter。使用paranethesis期望该方法会带参数…尝试map(this.service.method())
也就是说,使用paranethesis添加括号不应该起作用,method
是一个getter。使用paranethesis预期该方法将接受参数…这是它最初的外观:get-mapDatabaseDataToColumnConfiguration(){return(设置:SettingIO[]):GroupedConfigurationIO=>{return Object.keys(设置)。reduce((结果:GroupedConfigurationIO,key:string)=>{result[key]=设置[key]。设置值;返回结果;},{};};}
它是实时工作的,只有karma单元测试没有感觉到。也许我应该模仿它,等等。@KamilSocha91好吧,你在getter中没有条件。所以我的答案是不正确的。也许问题是,
服务在测试中是未定义的。这就是它最初的样子:获取mapDatabaseDataToColumnConfiguration(){return(settings:SettingIO[]):GroupedConfigurationIO=>{return Object.keys(settings).reduce((result:GroupedConfigurationIO,key:string)=>{result[key]=settings[key]。settingsValue;return result;},{};};}
它是实时工作的,只有karma单元测试没有感觉到。也许我应该模仿它,等等。@KamilSocha91好吧,你在getter中没有条件。所以我的答案是不正确的。也许问题是,服务在测试中是未定义的。