我正在尝试为函数编写单元测试,但是我收到了错误。我也不确定如何正确测试函数的其他部分。
private dictionaryMap (loggedIn, response) {
const translations = this.convertToArrays(response.data.translations);
this.configureMomentLocale(language);
if (!loggedIn) {
this.cachePublicDictionary(translations);
}
// not testing this part
this.dictionary = new Dictionary({
translationMap: Object.assign({}, this.getPublicDictionaryFromCache() || {}, translations),
});
return this.rx.Observable.of(this.dictionary);
}
到目前为止我的单元测试看起来像这样:
describe('dictionaryMap', () => {
it('calls configureMomentLocale()', () => {
const foo = {
'foo':'bar',
};
spyOn(service, 'configureMomentLocale');
service.dictionaryMap({}, false);
expect(service.configureMomentLocale).toHaveBeenCalled();
});
});
当我运行此测试时,我收到此错误:
TypeError:undefined不是对象(评估'response.data.translationMap')
我是否需要模拟response.data.translations或指定json结构? (翻译地图:{'email':'email','forgotPassword':'忘记密码?'})
另外,我不确定如何正确测试函数的其他部分,比如if语句或返回observable。作为单元测试的新人,任何建议/帮助都非常感激。
答案 0 :(得分:1)
您的方法dictionaryMap
接受2个参数 - 第1个是loggedIn
(可能是布尔值),第2个是response
。在该方法的第一行(在调用configureMomentLocale
之前),您有一行const translations = this.convertToArrays(response.data.translations);
,希望response
变量具有名为data
的属性。
在测试中,service.dictionaryMap({}, false);
行上有2个错误:
data
该行应更正为类似于service.dictionaryMap(false, { data: {} });
的行。您甚至可能需要为translations
对象定义data
属性 - 它实际上取决于this.convertToArrays
函数的作用以及它如何处理undefined
值。