问题标签 [mox]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
131 浏览

python-unittest - 使用 pymox 模拟多次调用的函数

我在代码中有一个被调用两次的函数。 get_user_settings 一旦它在我正在测试的函数中被调用,并且第二次某些不同的模块具有再次调用它的函数。

我已经像这样使用 pymox 模拟了它:

模拟适用于我的测试代码的第一次调用,但是当它在 utils 模块中再次调用时,我收到以下错误

0 投票
1 回答
878 浏览

elixir - 使用 Mox 测试函数链中的多个 API 调用

我正在尝试测试我正在正确转换从第三方 api 返回的数据。我在使用 Mox 时遇到了一些麻烦,因为我需要在数据转换期间访问两个单独的端点。让我通过发布代码更清楚地解释:

测试:

代码:

忽略这样一个事实,即编写的代码实际上不会通过测试。这是我试图弄清楚的测试失败。

问题:

第二个 api 调用team_profile在测试中被调用了两次,因为我遍历了两次team_ids,并且每次team_id调用 API。这是意料之中的,但测试并没有为此做好准备,因为我收到了这个错误。

错误:

这是对的。我确实调用了两次,但是如何设置测试以期望该 API 端点将被调用两次?

0 投票
1 回答
447 浏览

testing - 如何用 Mox 模拟 HTTPoison?

背景

我有一个库,它使用 HTTPoison 来实现我需要测试的一些功能。为了实现这一点,我正在使用Mox,我相信它是 Elixir 的通用模拟库(即使还有其他的,这个已经获得了 José Valim 的批准印章)

问题

一切都很好,我在以下位置定义了我的模拟test_helpers.exs

我设置了我的虚拟测试:

这里的问题是我无法运行它们:

模块 HTTPoison 不是行为,请将行为传递给 :for

模拟合同,而不是实现

现在,我知道 José Valim 支持这种意识形态,因此我们应该嘲笑的一切都应该有一个合同。但是 HTTPoison 不是我的,也没有。所以这让我想到了以下问题:

  • 如何使用 Mox 模拟不提供行为的第三个库?
0 投票
0 回答
256 浏览

python - python使用mox模拟打开方法

当我尝试模拟 open 方法时,我遇到了问题。请找到示例代码:

测试方法 :

对于模拟开放方法,我尝试过:

但这并没有解决问题。我收到此错误:

有人可以指导我模拟文件打开的正确过程。我试过这些组合:

任何见解/解决方案将不胜感激。

0 投票
1 回答
40 浏览

python - 模拟导入模块时调用的函数

我想测试一个A使用带参数的装饰器的模块。A加载模块时对参数进行评估。对于一些装饰器参数,我通过调用foomodule 中的函数来设置值B

当我想测试A时,我想模拟B.foo以便为我的测试用例设置装饰器参数。我认为这B.foo必须在A加载之前被嘲笑B

在单元测试中,作为 的调用者A,我如何模拟B.foo以确保在评估装饰器参数时使用模拟版本A

0 投票
1 回答
157 浏览

automated-tests - Elixir Mox 库测试 Phoenix 代码 - 在某些测试文件中没有 Mox 期望

TL;博士

不相关的测试失败,因为在使用 Mox 库时“没有定义期望”,并且stub_with/2似乎没有任何帮助

细节:

有 Recaptcha 库

https://github.com/samueljseay/recaptcha

这有助于我验证 recaptcha 响应。都不错。测试时间(是的,在让代码以某种方式工作之后——向所有 TDD 粉丝道歉)。显然我不想用我的测试来打谷歌叔叔,所以:

里面test_helper.ex。需要单独定义该行为:

使用以下方法进行一些测试:

到目前为止一切顺利,除了......所有其他测试现在都失败了:

阅读我发现的优秀文档:“[...] 当没有定义期望时,您可能希望实现回退到存根(或实际)实现。stub_with/2这正是您所需要的!”

所以另一行test_helper.ex

那是行不通的,因为** (ArgumentError) Recaptcha does not implement any behaviour,好吧..然后让我们添加我自己的“代理”,它可以:

并将test_helper.ex行更改为

现在ArgumentError它消失了,但所有没有 Mox 期望的测试都像以前一样失败。有和没有stub_with/2.

而且我觉得我已经花了太多时间在它上面...... :-( 有什么帮助让我走上正轨吗?

更新:

根据评论中的要求,失败的测试例如控制器测试:

是的,由于生成了请求,他们(不必要地)“触摸”了 Recaptcha,这是另一回事,“解决方案”不是让他们在 Recaptcha 周围走动,而是让他们stub_with/2完成它的工作。

0 投票
1 回答
70 浏览

unit-testing - 使用 Mock 或 Mox 在 Elixir 中模拟连续的函数调用

我正在尝试模拟函数多次调用,因此它每次都会返回特定的不同值。我对 Elixir 和函数概念不太熟悉。

Roller 每次调用都会返回一个随机数。

所以假设list包含一个以上的元素,则滚轮被调用 2 次。在我的测试中,我需要以某种方式控制它。

我用 Mock 试过了。我想以最简单的方式做这样的事情。不必在任何地方保存一些状态或为每次调用运行单独的进程,这将是很棒的。我知道 Elixir 的思维方式可能与我的客观范式思维方式略有不同。测试模块的最正确的Elixir 方法是什么?VolunteerFinder