如果你写一个类似的测试类
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个左右的可能值,测试人员想测试每个场景.这就是使用复制和粘贴编程的原因.我可以设想的唯一替代方案是六元素参数和期望值数组.
现在似乎每个人都在使用rspec,但默认情况下rails仍然与test :: unit捆绑在一起.
rspec相对于测试单元有什么主要优势吗?关于这个主题很难获得直接信息......
我正在尝试修复嵌套资源的功能测试.我的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以来,可以在夹具数据中定义关联,而无需借助这些显式的键定义.我现在被迫回到这只老鼠窝里,因为我正在筑巢资源吗?
有没有更好的方法让我的测试通过?
我的 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)
我该如何修复它?
我使用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?
我有两个单元测试,应该使用略有不同的设置方法共享许多常见测试.如果我写的东西像
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的新手.我在这里错过了什么?
如何测试Rails中控制器操作的响应是否为文件?(机架测试或水豚)
我应该使用单元测试吗?
场景很简单:我必须测试来自数据库的导出用户是否与动作生成的.csv中包含的用户相同.
我对rails测试很新,我尝试使用shoulda,但它打破了我把它放入的任何模型,所以我想我应该手动测试它们.
所以我的问题哦,SO的伟大专家是这样的:
如何使用test :: unit测试模型是否与另一个模型相关联?
测试方法允许将 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 编写测试的经验,因此非常感谢任何指导。
在我的测试中,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 …
testunit ×10
ruby ×5
unit-testing ×3
delayed-job ×1
fixtures ×1
inheritance ×1
minitest ×1
mocha.js ×1
mongoid ×1
rack-test ×1
rspec ×1
rubygems ×1
tdd ×1
testing ×1