问题标签 [shoulda]

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 投票
3 回答
1647 浏览

ruby-on-rails - 未初始化的常量 Test::Unit::TestResult::TestResultFailureSupport

当我尝试在新的 Rails 项目中运行规范或生成器时,我在 subj 中收到错误。

当我将 shoulda 添加到混合物中时,就会发生这种情况。

我在 config/environment.rb 中添加了以下内容:

我在 OSX 上。

  • ruby 1.8.6 (2008-08-11 补丁级别 287)
  • 宝石 1.3.5
  • 导轨 2.3.4
  • rspec - 1.2.6
  • 应该 - 2.10.2
  • 测试单元 - 2.0.3

我知道这一点并添加config.gem 'test-unit', :lib => 'test/unit'确实解决了生成器问题,因为它不会引发异常,但它会0 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications在运行结束时打印,所以我想它会尝试运行意外和不受欢迎的测试,规格也停止完全运行,似乎 rspec 根本没有运行,运行时rake spec我再次得到测试单元输出(有 0 个测试,因为只有规范,没有定义测试)

0 投票
1 回答
339 浏览

ruby-on-rails - Test::Unit 测试在 OS X 上通过,在 CentOS 上出错

我有一组针对 Rails 应用程序的 Test::Unit 测试。它是在 Ruby 1.8.6、Rails 2.3.4 下的 OS X 上开发的。

我也在使用thoughtbot-shoulda 2.10.2。

我使用的是标准 Rails 夹具,而不是工厂。

我已经将该项目签出到 CentOS Linux 5 工作站上,以供其他开发人员使用。他正在运行 Ruby 1.8.7。

(该应用程序正在生产中的 CentOS Linux 5 上运行,并且在那里运行良好。)

在我同事的 CentOS 开发机器上,所有的单元测试都通过了。

但是,大多数(但不是全部)功能测试都出错了。我已经隔离了一个测试(从项目中删除了所有其他测试)以缩小故障排除范围。

我们得到的错误是......

我认为关键的谜团是为什么它找不到Address具有该 ID 的。

另一个因素是,当我注释掉这个块时,剩下的测试通过了。

有人见过这个吗?

故障排除建议?

0 投票
3 回答
1090 浏览

ruby-on-rails - 我应该使用什么测试框架来测试我的 Rails 模型?

Ruby 社区中有许多可用的测试框架,即 unittest、rspec、shouda 和 cana,那么测试我的 Rails 模型最合适的测试框架是什么?

它们基本上具有相同的功能,即对我的模型进行单元测试吗?我什么时候应该使用哪个?使用一个而不是另一个有什么好处?请帮我决定。

非常感谢您的见解。

0 投票
8 回答
1321 浏览

ruby-on-rails - Rails 上的 BDD - 社区更支持 Shoulda 还是 RSpec?

对于一个新的应用程序,我想开始涉足 BDD,我正在尝试在使用 RSpec 或 Thoughtbot 的 Shoulda 之间做出决定。我喜欢 Shoulda 使用的宏,而且它似乎并没有重新发明 Ruby/Rails 进行测试的方式,而只是提供了一个附加组件。另一方面,宏看起来有点“神奇”,而不是明确说明您正在测试的内容(但是我从涉猎中知道,在上面写一打“如果没有 xxx 应该无效”两行一个模型)。老实说,我发现为模型编写规范/测试非常简单,几乎无聊,但我发现为控制器编写它们非常困难,因为我永远不确定我应该测试什么或如何编写它。

我对 mocking 和 stubbing 的主题很不确定,因为我认为它们给了你错误的假设(因为你可以告诉它认为它有你需要的任何数据或假装调用了 Method X)而且我知道 RSpec 很重使用它们。我喜欢 RSPec 生成的文档,但我正在创建一个销售应用程序,而不是提供给客户,所以漂亮的文档没有那么有用。我喜欢 Cucumber,但它似乎有点矫枉过正(是的,我知道它可以与 Shoulda 一起使用)。

在这一点上,Rails 社区是支持 RSpec 还是 Shoulda?

0 投票
3 回答
5870 浏览

ruby-on-rails - 如何在 ruby​​ Test::Unit 框架中运行单个 shoulda 上下文测试

我通常可以使用以下命令行语法来测试常规 Test::Unit 方法,用于方法“delete_user_test”:

现在,当我将 shoulda 插件与 Test::Unit 一起使用时,我尝试使用以下相同的技术:

然后我尝试按如下方式运行单个测试:

这行不通。有谁知道我如何使用 shoulda 和 Test::Unit 运行单个上下文测试。我在一个测试文件中有几个不同的测试,我只想使用 TDD 运行一个,而不必等待所有测试运行。

0 投票
4 回答
1138 浏览

ruby-on-rails - Shoulda + FactoryGirl:我可以让我的测试更快吗?

我正在寻找一种方法来加快我的Shoulda + FactoryGirl测试。

我要测试的模型 ( StudentExam) 与其他模型有关联。这些关联对象必须存在,然后我才能创建StudentExam. 因此,它们是在setup.

但是,我们的模型之一 ( School) 需要大量时间来创建。因为setup在每条语句之前都被调用should,所以整个测试用例需要 eons 来执行——它为每个执行的 should 语句创建一个新@school@student,@topic和。@exam

我正在寻找一种方法来创建这些对象一次且仅一次。是否有类似startupforbefore_all方法的东西可以让我创建将在整个测试用例的其余部分持续存在的记录?

基本上我正在寻找与 RSpec 完全相同的东西before(:all)。我不关心依赖问题,因为这些测试永远不会修改那些昂贵的对象。

这是一个示例测试用例。为长代码道歉(我还创建了一个要点):

0 投票
3 回答
1311 浏览

ruby-on-rails - 我应该在 Rails 控制器测试中模拟我的模型吗?

我在我的报道中发现了漏洞,因为我一直在控制器示例中模拟我的模型。当我删除控制器所依赖的模型方法时,我不会失败。

来自静态类型语言的 TDD,我总是会模拟对命中数据库的被测对象的依赖关系以提高速度。在上面的例子中我仍然会失败,因为我的模拟子类化了原始对象。我正在寻找动态语言的最佳实践。

谢谢。

更新:

在对此有很多相互矛盾的意见之后,似乎归结为您购买哪种哲学。

Rspec 社区似乎采用大量存根依赖项来实现被测对象的隔离。验收测试(传统上称为集成测试;)用于确保您的对象与它们的运行时依赖项一起工作。

shoulda / Test::Unit 社区似乎尽可能地远离存根。这允许您的测试确认您的测试对象实际上与它的依赖项一起工作。

该视频很好地总结了这一点:http: //vimeo.com/3296561

0 投票
4 回答
311 浏览

ruby-on-rails - 应该在没有 id 的模型上测试失败

我在我的 rails 应用程序中创建了一个新模型。由于它与另一个表是一对一的关系,因此新模型不需要具有 id 列。一切正常,但由于某种原因,我在这个模型上的所有 Shoulda 测试都失败了。例如:

正在抛出此错误:

是否应该需要一个 ID 列?如果是这样,有没有办法解决这个问题?

0 投票
4 回答
4470 浏览

ruby-on-rails - 应该:测试 validates_presence_of :on => :update

在我从事的一个项目中,我将 Shoulda 与 Test::Unit 结合使用。我遇到的问题是我最近改变了这个:

对此:

以前,我的(通过)测试看起来像这样:

据我所知,没有任何参数should_validate_presence_of会导致该测试继续通过上面指定的更改。在测试需求时没有放弃应该:attribute_two,有什么办法解决这个问题吗?

0 投票
1 回答
304 浏览

ruby-on-rails - 测试 Rails 控制器时,如何将嵌套资源与多个 post 值混合?

我有一个名为“Post”的模型,它是一个名为“Project”的模型下的嵌套资源,我正在尝试测试控制器。该代码可以在我的浏览器中找到,但我无法让它在测试中工作。这是测试

知道我是怎么搞砸的吗?