使用 mocha 和 chai 测试 fetch

Jea*_*ean 5 javascript testing mocha.js chai fetch-api

我有以下示例测试:

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)
  })
})
Run Code Online (Sandbox Code Playgroud)

但我得到

ReferenceError: fetch is not defined
Run Code Online (Sandbox Code Playgroud)

我必须使用什么才能测试提取请求。

更新


我也尝试过:

import { polyfill } from 'es6-promise'
import fetch from 'isomorphic-fetch'
Run Code Online (Sandbox Code Playgroud)

但后来我得到:

AssertionError: expected undefined to equal 7
Run Code Online (Sandbox Code Playgroud)

我不明白为什么。

Pla*_*aul 3

您可能正在使用 Node.js 在服务器端测试您的代码。

fetch不是节点的一部分,而是一个 Web-API,您可以通过较新的浏览器获得,并且可以在浏览器中运行的 JavaScript 中使用。

您需要如下所示导入node-fetch ,它将起作用:

npm install node-fetch --save
Run Code Online (Sandbox Code Playgroud)

并在您的代码中:

const fetch = require("node-fetch")
...
Run Code Online (Sandbox Code Playgroud)

如果您正在运行(不支持 fetch 的旧浏览器)并且没有使用像 webpack 这样的工具,则必须以旧的“传统方式”包含 html 中的 polyfill。