簡體   English   中英

使用mocha和chai測試獲取

[英]testing fetch with mocha and chai

我有以下示例測試:

import { assert } from 'chai'

function starWarsMovies () {
  fetch('http://swapi.co/api/films/')
    .then((res) => {
         return res.json()
     })
     .then((res) => res.count)
}

describe('Get star war movies', () => {
  it('should get 7', () =>{
    assert.equal(starWarsMovies(), 7)
  })
})

但我得到了

ReferenceError: fetch is not defined

我必須使用什么來測試獲取請求。

UPDATE


我也嘗試過:

import { polyfill } from 'es6-promise'
import fetch from 'isomorphic-fetch'

但后來我得到:

AssertionError: expected undefined to equal 7

而且我不明白為什么。

您可能正在使用node.js測試代碼服務器端。

fetch不是節點的一部分,但是是一個web-API,您可以使用較新的瀏覽器,並可以在瀏覽器中運行JavaScript。

您需要導入下面草繪的節點提取 ,它將工作:

npm install node-fetch --save

在你的代碼中:

const fetch = require("node-fetch")
...

如果您正在運行(較舊的瀏覽器不支持fetch)並且沒有使用像webpack這樣的工具,則必須使用舊的“傳統方式”從html中包含polyfill。

即使你使用node-fetchisomorphic-fetch ,這里的問題是你要檢查一個數字和一個不返回任何東西的函數的結果之間的相等性。 我能夠做到這一點!

describe('Get star war movies', () => {
    it('should get 7', async () => {
        await fetch('http://swapi.co/api/films/')
            .then((res) => {
                return res.json()
            })
            .then((res) => {
                console.log(res);
                assert.equal(res.count, 7)
            })
    })
})

請注意,我在這里使用async await語法。 我們有很多不同的方法可以做到這一點(回調,承諾,異步/等待),但關鍵是在調用API時我們必須等待結果。 此外,你從星球大戰API獲得的響應似乎是一個巨大的對象,所以我冒昧地假設你只是檢查計數!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM