如何解决如果测试文件与 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。
注意
- 我的单元测试是用 Tape test harness 构建的。
^1 错误信息:
fetch-mock
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。