Nock 在 Redux 测试中没有拦截 API 调用

2024-01-24

我正在尝试在 redux 应用程序中测试 api 调用。该代码几乎遵循中概述的模式异步动作创建者redux 文档的部分:

http://redux.js.org/docs/recipes/WritingTests.html http://redux.js.org/docs/recipes/WritingTests.html

它的要点是你使用redux 模拟商店记录并断言任何触发的操作。

这是整个测试,使用 nock 来模拟 api 调用:

import React from 'React'
import ReactDOM from 'react-dom'
import expect from 'expect';
import expectJSX from 'expect-jsx';
import TestUtils from 'react-addons-test-utils'
import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
import nock from 'nock'
expect.extend(expectJSX);

import * as types from '../../constants/Actions'

describe('Async Search Actions', () => {
    const thunkMiddleware = [ thunk ];
     /* use redux-mock-store here */
    const mockStore = configureMockStore(thunkMiddleware);


    describe('The fetchArtistData action creator should', () => {

            afterEach(() => {
                nock.cleanAll()
            })

        it('Should fire off a ARTIST action when fetch is done', (done) => {
            nock('http://ws.audioscrobbler.com')
                .get('/2.0/')
                .query({method: 'artist.search', artist: 'ho', api_key: 'abc123', format: 'json', limit: 5})
                .reply(200, 
                      {
                        fake: true
                      }
                   )



            const expectedActions = [
                { type: types.ARTIST, artists: {
                        fake: true
                    } 
                }
            ];

            let store = mockStore([], expectedActions, done);
            store.dispatch(fetchArtist('ho'))

        });

    });

});

但似乎在测试运行时调用了真正的lastFm api...真正的数据是从lastFm返回的,而不是假的nock响应。

这是动作创建者本身:

export function fetchArtist(search) {
    return dispatch => {
        return fetch(`http://ws.audioscrobbler.com/2.0/?method=artist.search&artist=${search}&api_key=abc123&format=json&limit=5`)
            .then(handleErrors)
            .then(response => response.json())
            .then(json => { dispatch(ArtistData(searchTerm, json)) })
            .catch(handleServerErrors)
    }
}

断言失败,因为实时的 LastFM 响应与我期望的响应不同expectedActions目的..

我尝试将 nock 分配给变量并将其注销。日志显示:

Nock 似乎将端口 80 添加到 url,不确定这是否会导致实际的 API 不被模拟:

    keyedInterceptors: Object{GET http://ws.audioscrobbler.com:80/2.0/?
method=artist.search&artist=john&api_key=abc123&format=json&limit=5

有什么想法这里出了什么问题吗?


为了使用 nock,您必须在 Node 中运行测试(使用 Jest 或 mocha),nock 会覆盖 Node http 行为,因此它只能在 Node 中运行,而不能在浏览器中运行(如 PhantomJS)。

例如,您指出的链接正在使用 Jest,第一行明确介绍了节点环境。因此,诺克将起到护身符的作用。http://redux.js.org/docs/recipes/WritingTests.html http://redux.js.org/docs/recipes/WritingTests.html

配置

我们推荐 Jest 作为测试引擎。注意它运行 在 Node 环境中,因此您将无法访问 DOM。

据我所知你可以:

  • 在节点环境中运行测试
  • 或使用不同的库来模拟获取模拟 https://github.com/wheresrhys/fetch-mock
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nock 在 Redux 测试中没有拦截 API 调用 的相关文章

随机推荐

  • 显示 Rails Carrierwave URL,而不暴露整个路径

    我正在制作一个付费下载的网络应用程序 并且我遵循了 Carrierwave 的指南保护上传 https github com carrierwaveuploader carrierwave wiki how to secure upload
  • 如何更新进度条的进度以显示复制文件的进度

    我想要一个进度条来指示正在复制的文件如何通过组合以下代码行来更新进度条以显示复制文件的进度 这是我的进度条代码 FXML private void startbtnaction ActionEvent event startbtn setD
  • ASP.NET 5 beta 7 的共享类库参考

    在我们当前的环境中 我们有一些共享的公共库 C 类库 NET 4 5 1 csproj 项目 它们被 ASP NET 和控制台应用程序引用 我们正在考虑将 1 个 Web 项目升级到 ASP NET 5 以开始测试即将到来的一些新更改 由于
  • Flexbox 在 Safari 中添加 1px 左边距

    我在 Safari 向 Flexbox 行中第一个元素的左侧添加 1px 边距 间隙时遇到问题 我在下面附上了该问题的图片 弹性框 CSS 是 equal height display webkit box OLD iOS 6 Safari
  • 如何使用 apache poi 从公式单元格读取单元格值

    我正在尝试从 Excel 文件中读取所有数据 该文件也有一些公式单元格 但我不知道哪个单元格是公式单元格 无论单元格的类型如何 我如何读取单元格中的所有值 我的代码看起来像这样 FormulaEvaluator evaluator wb g
  • 如何命名 es6 类(针对 React 组件)

    这是 ES6 问题的一部分 React 问题的一部分 我正在尝试使用命名空间组件 https facebook github io react docs jsx in depth html namespaced components在 Re
  • Android 搜索图标未显示在操作栏上

    当我在 Android 上学习本教程时遇到了一个问题 正如主题中提到的 我的搜索图标没有显示在操作栏上 我在那一步遇到了问题 http developer android com training basics actionbar addi
  • 如果向量包含值,C++ 代码将不会运行

    我正在使用 VS Code 和 Vim Windows 操作系统 MSYS2 MingW GCC G V 11 2 0 编译器 如果我的代码包含向量 则运行代码时不会有输出 编译或运行代码时没有收到错误 警告 include
  • Python 中的过滤对象数组

    我正在使用 Python 来挖掘一个相当大的项目并挖掘有关它的信息 我能够创建一个数组ProjectFiles 但是我很难弄清楚如何过滤它 class ProjectFile def init self filename str numbe
  • github页面中的图像和相关链接

    我创建了一个用户的 github 页面 现在 假设我在存储库的根目录中有一个图像文件 位置为Images Emoticons Cool png 我尝试将该图像插入到我的主图像中Index html file 我写的 img src 线上和线
  • 在 GitHub 中,有没有办法查看所有分支上的所有(最近)提交?

    在 GitHub 中 有没有办法查看所有分支上的所有最近提交 最好按照时间倒序排列 也许我是个窥探者 但我希望能够看到我的开发人员最近做了什么 至少在对 github 存储库的提交方面 到目前为止 我见过的最接近的是网络图 这当然非常有用
  • 如何让unix脚本每15秒运行一次?

    我见过一些解决方案 包括监视和简单地在后台运行循环 和休眠 脚本 但没有一个是理想的 我有一个脚本需要每 15 秒运行一次 并且由于 cron 不支持秒 所以我不得不解决其他问题 在 UNIX 上每 15 秒运行一次脚本最稳健 最有效的方法
  • 使用加速缩放 Ycbcr (420f) 时的伪像

    我找不到任何有关如何调整 Ycbcr biplanar 大小的文档或示例 根据 Apple 的说法 Ycbcr biplanar 应该是您应该在 iOS 上使用的主要格式 我尝试像这样调整两个飞机的大小 resize luma vImage
  • 无法加载时区?

    我正在尝试将时区加载到我的 MySql 实例 在 Ubuntu 上运行 中 以便我可以使用 CONVERT TZ 函数 但是当我运行以下命令时 mysql tzinfo to sql usr share zoneinfo mysql u r
  • 为什么 .PHONY 在这种情况下不起作用?

    我有一个复杂的 makefile 似乎每次调用它时都会重新链接我的库和可执行文件 我能够将问题缩小到一个简单的 makefile 1 all prog 2 3 PHONY prog 4 prog prog exe 5 6 prog exe
  • Haskell 中的教堂数字

    我正在尝试使用以下定义在 haskell 中打印教堂数字 0 fx x 1 fx f x 哈斯克尔代码 c0 f x gt x c1 f x gt f x 当我在 haskell 控制台中输入它时 我收到一条错误消息 test gt c1
  • 错误Emacs slime:eval-buffer:符号的函数定义为void:define-slime-contrib

    我在短时间内使用 emacs 和 lisp 使用 slime 这个工作正常 但是今天当我运行它时出现以下消息 eval buffer 符号的函数定义为空 define slime contrib 这意味着我的 slime contrib 文
  • Visual Studio:如何管理项目之间共享的代码

    这可能之前已经发布过 但我不确定要查找什么搜索词 快速解释 我有一些项目之间共享的代码 该代码本身仍在进行中 问题是 每当我需要更新此代码时 我不想更新 3 次 这将成为一场噩梦 有没有办法将其添加到项目中 而不将其复制到项目文件夹中 即我
  • 定义 Spring AOP 后无法切换数据库

    我正在研究多租户架构 我们必须处理数据库的动态创建和切换 我面临的问题是 我在 AOP 级别编写了切换数据库的整个代码 然后在控制器或服务级别我无法进行另一个切换 AOP类 The type Api util Aspect Componen
  • Nock 在 Redux 测试中没有拦截 API 调用

    我正在尝试在 redux 应用程序中测试 api 调用 该代码几乎遵循中概述的模式异步动作创建者redux 文档的部分 http redux js org docs recipes WritingTests html http redux