使用Mocha和Chai测试Fetch

5

我有以下示例测试:

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

我需要用什么来测试fetch请求?

更新


我也尝试过:

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

但是我遇到了以下问题:
AssertionError: expected undefined to equal 7

而我不明白为什么。

你尝试过这个吗?https://mochajs.org/#asynchronous-code - Alexandre Magro
2个回答

3

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

fetch不是node的一部分,但它是一个Web API,你可以在较新的浏览器中使用,并且可以从在浏览器中运行的JavaScript中使用。

你需要按照下面的示例导入node-fetch,然后它就会工作:

npm install node-fetch --save

在你的代码中:

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

如果您在使用不支持fetch的旧版浏览器,并且没有使用webpack等工具,则必须以传统方式从html中包含polyfills。

3
即使您使用 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语法。我们可以采用许多不同的方法来实现此操作(回调,承诺,async/await),但关键是在调用API时必须等待结果。此外,从星球大战API获得的响应似乎是一个巨大的对象,因此我假设您只是要检查计数!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接