如果测试文件与 Browserify 捆绑在一起,如何在单元测试中模拟获取?

问题描述

我正在对一个调用浏览器原生 fetch method 的模块进行单元测试,并且在测试中我想模拟该调用。但就我而言,在运行测试之前,测试文件是捆绑的(使用 browserify/Babelify)。在这种相对独特的情况下,我有哪些模拟获取的选项? browserify/Babelify 步骤似乎会导致通常的模拟获取方式出现问题。

为什么我要使用 browserify/Babelify 进行测试?

我的 Node 项目使用 ES6 模块,但我不能在我的项目的 Imports System.Data.Common Imports Oracle.ManagedDataAccess 'Imports Oracle.DataAccess Module Views Function CreateCommand(Connection As DbConnection) As System.Data.Common.DbCommand Dim cmd As Data.Common.DbCommand = Connection.CreateCommand() With CType(cmd,Client.OracleCommand) .BindByName = True .FetchSize = &H100000 '1 Mb .InitialLONGFetchSize = -1 'the entire LONG or LONG RAW data is prefetched and stored in the fetch array. .InitialLOBFetchSize = -1 'the entire LOB data is prefetched and stored in the fetch array. End With Return cmd End Function Sub query() Try Using DBConnection = New Client.OracleConnection("User ID=TESTUSER;Password=TESTPWD;Data Source=TESTDB;Pooling=True") DBConnection.open() Using DBConnection.BeginTransaction() Using cmdsql = CType(CreateCommand(DBConnection),Client.OracleCommand) cmdsql.CommandText = "select TEXT from DBA_VIEWS where VIEW_NAME = :0" Dim p = cmdsql.CreateParameter() p.ParameterName = "0" p.Value = "TEST_VIEW" cmdsql.Parameters.Add(p) Dim sw = Stopwatch.StartNew Using rdr = cmdsql.ExecuteReader rdr.FetchSize = 2 ^ 20 While rdr.Read Dim row(rdr.FieldCount - 1) As Object rdr.GetProviderSpecificValues(row) Dim x = row(0) Console.WriteLine($"{x.ToString.Length} bytes") End While End Using Console.WriteLine($"{sw.ElapsedMilliseconds} ms") End Using End Using End Using Catch ex As Exception Console.WriteLine(ex.ToString) End Try End Sub End Module 文件中设置它(例如通过设置 package.json),因为我的项目使用的是 Cordova framework,它是与 ES6 模块不兼容。所以为了在 Node 中运行我的单元测试,我必须捆绑 browserify/Babelify。
有没有人知道在这种情况下我可以如何模拟获取

我尝试模拟 Fetch 到目前为止

  • node-fetch:我尝试使用这个包来公开 fetch 方法,然后使用一个模拟包(例如 Sinon)来模拟它。但是当我将 node-fetch 导入到我的测试文件中,然后在该文件上运行 browserify/Babelify 时,命令失败。^1

  • fetch-mock:在我的情况下,由于 browserify/Babelify 捆绑,type: modules 将无法模拟提取 (see here)。

  • Sinon/proxyquire:我的项目安装了这两个包,但我不知道如何使用其中一个(或两个)来模拟提取。>

我还没有尝试过的选项

  • 从 ES6 模块重构为 Commonjs 模块:这似乎是最合理的方法,因为它可以完全消除在我的单元测试中使用 browserify 的需要。
  • browserify 切换到 Rollup 或 Webpack。

注意


^1 错误信息:

fetch-mock

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)