Ruby on Rails:运行测试

时间:2009-03-26 16:49:06

标签: ruby-on-rails unit-testing testing

当我想运行所有单元测试时,我运行rake test:units。要运行我的所有功能测试,我运行rake test:functionals。如果我想在一个文件中运行所有测试用例,我运行

ruby​​ test / unit / username_test.rb

有些人一直告诉我应该用rake来代替,比如

rake test:单位TEST = test / unit / username_test.rb

为了运行测试,他们说我应该总是运行rake。我知道如果我正在测试我所有的单元测试,我应该运行rake。但是,如果它只是我正在测试的文件中的一个文件或一个特定的测试方法呢?我还应该用耙子吗?这两者有什么区别吗?在红宝石上运行rake可以获得任何好处吗?运行红宝石而不是耙是否有任何不利之处?

5 个答案:

答案 0 :(得分:7)

可悲的是,两者并不相同。在rake下运行测试可以最终从不同的地方拉出东西,而不是直接运行测试(当你的系统上有多个版本的宝石时,更多的问题)。

目的是在rake下运行的测试应该在与rails会产生的匹配的环境中;我无法证明它们的匹配程度,但我看到直接运行时通过的测试但是通过rake或rails运行时失败(反之亦然)。

答案 1 :(得分:3)

在办理登机手续之前,我建议您至少运行rake以确保所有内容都没有出现。

普通红宝石似乎是在迭代过程中快速测试单个文件的理想选择。

请注意,通过rake运行所有内容可以产生不同的结果来单独运行所有内容,因为我最近发现了我的困惑 - 我在一次测试中做了一些稍微错误的事情,这种测试在隔离中成功运行但是留下了一个问题后来的测试只在我使用rake时出现。

答案 2 :(得分:2)

不,我不这么认为。 Rake似乎是运行所有测试,所有单元测试或所有功能/控制器测试的便捷方式。 对于单个文件,我使用ruby object_test.rb方法..更短,并且适用于我的rails home项目。

答案 3 :(得分:0)

它们应该完全相同。如果他们不是,你肯定做错了。

正如我在其他评论中所说的那样,如果你通过一次测试,但是另一次测试失败,那么你做的事情是非常错误的;这表明测试设置不佳,通常是由两种测试方法之间的不同测试运行顺序引起的;其中一个导致测试失败。

通常原因是你没有使用交易和/或测试没有自行清理。例如,没有正确地要求他们稍后测试的灯具,而是依赖于预先存在的数据库状态。

您可以自由使用任何一种方法。如果出现问题,你在测试中做错了,你应该修改你的代码。

答案 4 :(得分:0)

两者不一样。 Rake将进行一些初步的测试加载。

目的是在rake下运行的测试应该在与rails会产生的环境相匹配的环境中;

我注意到的一个不同之处是耙子发生了一些夹具装载,可能会被红宝石绕过。

我建议使用rake,除非您使用ruby命令行在文件中使用-n选项进行一次测试。