首页 > 解决方案 > 开玩笑测试只返回对象内的字符串

问题描述

我正在尝试进行一个开玩笑的测试,并认为期望,成为问题的一部分,因为我认为我正在比较的两个对象(数据、地名)是相同的。事实证明,他们不是。我的数据对象如下所示:

{"lat": "lat", "lng": "lng"}

znc 我的地名记录正确:

{lat: 'lat', lng: 'lng'}

我不知道为什么测试将所有内容都包含在对象数据字符串中,我无法弄清楚。这就是为什么我的期望没有执行。

这是我的代码:

describe('geonames', (url = 'https://geonamesapi.com', geonames = {lat: 'lat', lng: 'lng'}, 
    projectData = {
                zero: {
                    date: '03/19/2021',
                    place: 'city, state'
                },
                one: {
                    coord: 
                        {
                            lat: '', 
                            lng: ''
                        }, 
                    date: '', 
                    place: '',
                    location1: '', 
                    location2: ''
                }, 
                two: {
                    month: '', 
                    day: '', 
                    year: ''
                }, 
                three: {
                    high: '', 
                    low: '', 
                    forecast: ''
                },
                four: {
                    image: ''
                }}, place = '', date = '', place1 = '', place2 = '', place_split = '', data = '') => {

                    place = projectData.zero.place;
                    projectData.zero.date = date
                    projectData.one.date = date
                    place_split = place.split(', ')
                    place1 = place_split[0]
                    place2 = place_split[1]
                    projectData.one.place = place
                    projectData.one.location1 = place1
                    projectData.one.location2 = place2
                    projectData.one.coord.lat = geonames.lat
                    projectData.one.coord.lng = geonames.lng
    it('can get coordinates', async() => {

        fetchMock.once(url, {
            status: 200,
            statusText: 'OK',
            headers: {'Content-Type': 'application/json'},
            sendAsJson: true,
            body: JSON.stringify(geonames)
        }, {method: 'GET'});
        fetch(url, {
            method: 'GET',
            body: JSON.stringify({data: 'Received Payload'}),
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            }
        })
        .then(function(req){
            expect(req.status).toEqual(200);

            console.log(data)
            return req.json();
        })
        .then(function (json) {
            console.log(json.body);
            data = json.body;
            console.log(projectData)
            console.log(data)
            console.log(geonames)
            expect(data).toMatchObject(geonames)
            data = projectData
            return data;
        })
        .then(async function(data) {
            console.log(data);
            expect(data).toEqual(projectData);
        })
    }) 
})

标签: javascriptnode.jsexpressjestjs

解决方案


我知道了。我不得不改变:

body: JSON.stringify(geonames)

body: {geonames}

推荐阅读