标签: testunit

检测重写ruby测试方法

如果你写一个类似的测试类

class MyTest < Test::Unit::TestCase 
  def setup 
  end

  def test_1 
    flunk
  end

  def test_1 
    assert true
  end
end
Run Code Online (Sandbox Code Playgroud)

第一个test_1被忽略.虽然它看起来像一个愚蠢的错误,但它可能发生在复制和粘贴编程中.除了跑步

grep test test_me.rb | wc
Run Code Online (Sandbox Code Playgroud)

并将其与测试单元所运行的测试数量,或使用rcov或heckle,或与-w一起运行进行比较,您如何检测此类问题?

另外,有没有办法指定不应该覆盖测试方法?

编辑:正在测试的方法有一个参数,有6个左右的可能值,测试人员想测试每个场景.这就是使用复制和粘贴编程的原因.我可以设想的唯一替代方案是六元素参数和期望值数组.

ruby unit-testing testunit

3
推荐指数
1
解决办法
759
查看次数

如果有的话,rspec相对于test :: unit有哪些主要优点?

现在似乎每个人都在使用rspec,但默认情况下rails仍然与test :: unit捆绑在一起.

rspec相对于测试单元有什么主要优势吗?关于这个主题很难获得直接信息......

ruby rspec ruby-on-rails testunit

3
推荐指数
1
解决办法
1209
查看次数

我可以在不提供显式外键的情况下测试嵌套资源吗?

我正在尝试修复嵌套资源的功能测试.我的config/routes.rb文件看起来像这样:

Shop360::Application.routes.draw do

  resources :libraries do
    resources :library_imports
  end
end
Run Code Online (Sandbox Code Playgroud)

嵌套library_imports资源会破坏生成的测试,如下所示:

test "should get index" do
  get :index
  assert_response :success
  assert_not_nil assigns(:library_imports)
end
Run Code Online (Sandbox Code Playgroud)

因为嵌套会更改所有网址.

我已经在几个地方看到了通过添加如下library_id参数来解决这个问题的建议:

test "should get index" do
  get :index, :library_id => 1
  assert_response :success
  assert_not_nil assigns(:library_imports)
end
Run Code Online (Sandbox Code Playgroud)

(第二行改了)

为了使这个工作,我必须library_id在我的library_import夹具中明确指定一个?自Rails 2.0以来,可以在夹具数据中定义关联,而无需借助这些显式的键定义.我现在被迫回到这只老鼠窝里,因为我正在筑巢资源吗?

有没有更好的方法让我的测试通过?

ruby-on-rails fixtures testunit

3
推荐指数
1
解决办法
1331
查看次数

如何assert_select一个带有换行符的字符串?

我的 html 代码中有这个字符串:

1\n          \n            word
Run Code Online (Sandbox Code Playgroud)

我想创建一个忽略这些新行和空格的assert_select,所以我尝试了以下方法:

assert_select ".myclass", /1.+word/
Run Code Online (Sandbox Code Playgroud)

但它不起作用:

1) Failure: 
test_new_line(NewLineControllerTest) [test/functional/new_line_controller_test.rb:23]:
</1.+word/> expected but was
<"1\n          \n            word">.
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?

ruby-on-rails testunit

3
推荐指数
1
解决办法
910
查看次数

使用delayed_job'delay'方法时无法测试方法是否被调用

我使用Mocha,Test :: Unit和delayed_job来测试是否已经执行了mailer方法,如下所示:

  test "should send info about paid payment" do
    payment = Payment.new :contractor_name => "notempty", :address => "notempty"

    UserMailer.expects(:send_payment_info)

    payment.set_paid!

  end


  # model method
  def set_paid!
    self.status = 'paid'
    self.paid_at = Date.today
    self.save!

    UserMailer.delay.send_payment_info self
  end
Run Code Online (Sandbox Code Playgroud)

不使用延迟方法测试按预期工作,但有了它(我在初始化器配置中有Delayed :: Worker.delay_jobs =!Rails.env.test?)我得到:

NoMethodError:未定义的方法deliver' for nil:NilClass app/models/payment.rb:33:inset_paid!' test/unit/payment_test.rb:50:in,test_should_send_info_about_paid_payment'

我不知道如何解决这个问题?也许我应该以不同的方式使用UserMailer?

ruby-on-rails mocha.js testunit delayed-job

3
推荐指数
1
解决办法
560
查看次数

如何在Ruby中继承抽象单元测试?

我有两个单元测试,应该使用略有不同的设置方法共享许多常见测试.如果我写的东西像

class Abstract < Test::Unit::TestCase
  def setup
    @field = create
  end

  def test_1
    ...
  end
end

class Concrete1 < Abstract
  def create
    SomeClass1.new
  end
end

class Concrete2 < Abstract
  def create
    SomeClass2.new
  end
end
Run Code Online (Sandbox Code Playgroud)

然后Concrete1似乎没有从Abstract继承测试.或者至少我不能让它们在日食中运行.如果我为包含Concrete1的文件选择"Run all TestCases",那么即使我不想要它也会运行Abstract.如果我指定Concrete1那么它根本不运行任何测试!如果我在Concrete1中指定test_1,那么它会抱怨它无法找到它("uncaught throw:invalid_test(ArgumentError)").

我是Ruby的新手.我在这里错过了什么?

ruby inheritance unit-testing testunit

2
推荐指数
1
解决办法
1574
查看次数

如何检查响应是否是文件?

如何测试Rails中控制器操作的响应是否为文件?(机架测试或水豚)

我应该使用单元测试吗?

场景很简单:我必须测试来自数据库的导出用户是否与动作生成的.csv中包含的用户相同.

tdd ruby-on-rails testunit minitest rack-test

2
推荐指数
1
解决办法
2237
查看次数

如何测试与test :: unit的belongs_to,has_one或has_many关联?

我对rails测试很新,我尝试使用shoulda,但它打破了我把它放入的任何模型,所以我想我应该手动测试它们.

所以我的问题哦,SO的伟大专家是这样的:

如何使用test :: unit测试模型是否与另一个模型相关联?

ruby unit-testing ruby-on-rails testunit ruby-on-rails-4

2
推荐指数
1
解决办法
1740
查看次数

如何生成用于单元测试的临时文件?

测试方法允许将 a 添加path到用户添加的包含数据的其他文件中。

例如,用户可能会data.txt/workspace/data目录中存储一个调用的文件。我们希望将此目录的路径添加到名为DATA_PATH.

方法:

def add_custom_path(path)
  DATA_PATH.unshift(path)
end
Run Code Online (Sandbox Code Playgroud)

哪里path是在Rails应用程序用户存储文件的位置。

宝石使用test-unit.

题:

有没有办法在某个目录中临时生成一个文件,运行一个assert_not_empty测试,然后让文件消失?

我没有为 gem 编写测试的经验,因此非常感谢任何指导。

ruby rubygems ruby-on-rails testunit

2
推荐指数
1
解决办法
4448
查看次数

Mongoid不和工厂玩得很好

在我的测试中,Moingoid似乎没有持久地设置嵌入式关系.在我的用户模型中,我有:

  def vote_on(bill, value)
    if my_groups = self.groups
      my_groups.each do |g|
        bill.votes.create(:value => value, :user_id => self.id, :group_id => g.id)
        # result only with factories: bill.votes.first.group = nil
        # and bill.votes.first.user = nil !!
        # self.id and g.id have good values during the test, they just aren't persisting
      end
    else
      raise "no groups for this user" # #{self.full_name}"
    end
  end

其他有用的代码可能是:

## bill model
class Bill
   embeds_many :votes

## vote model

class Vote
  include Mongoid::Document
  field :value, :type => Symbol …

testing ruby-on-rails testunit mongoid

1
推荐指数
1
解决办法
774
查看次数