问题描述
我正在对一个调用浏览器原生 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。
注意
- 我的单元测试是用 Tape test harness 构建的。
^1 错误信息:
fetch-mock
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)