我是rspec的新手,我正在尝试了解如何编写一些特定的测试。
背景:
我有工作测试,所以我知道如何测试环境变量的存在。
以下是我的表现:
27 it "should know the username for each SUBDOMAIN in the list" do
28 @dm.domains.each do |dom|
29 ENV['C_USERNAME_' + dom].nil?.should eq(false)
30 end
31 end
正如我所说,测试有效。唯一的问题是,当它失败时,不清楚哪个dom没有设置环境变量。测试失败的结果如下:
dhaskew@Air1:~/code/projects/rules$ rake spec
/Users/dhaskew/.rvm/rubies/ruby-1.9.3-p194/bin/ruby -S rspec ./spec/c_spec.rb ./spec/main_spec.rb ./spec/routes_spec.rb
..F*.....*
Pending:
My Site Domain Manager should know the password for each SUBDOMAIN in the list
# Not yet implemented
# ./spec/c_spec.rb:33
My Site GET '/rules/SUBDOMAINS' should test all subdomains
# Not yet implemented
# ./spec/routes_spec.rb:28
Failures:
1) My Site Domain Manager should know the username for each SUBDOMAIN in the list
Failure/Error: ENV['C_USERNAME_' + dom].nil?.should eq(false)
expected: false
got: true
(compared using ==)
# ./spec/c_spec.rb:29:in `block (4 levels) in <top (required)>'
# ./spec/c_spec.rb:28:in `each'
# ./spec/c_spec.rb:28:in `block (3 levels) in <top (required)>'
Finished in 0.05095 seconds
10 examples, 1 failure, 2 pending
Failed examples:
rspec ./spec/c_spec.rb:27 # My Site Domain Manager should know the username for each SUBDOMAIN in the list
rake aborted!
问题:如何更好地编写此测试,以便查看未定义的环境变量。
感谢。
答案 0 :(得分:0)
一个简单的解决方案是:动态生成it
测试。通常,每个方案/ it
阻止一个测试。在这种情况下:
@dm.domains.each do |dom|
it "should know the username for #{dom} in the list" do
ENV['C_USERNAME_' + dom].should_not be_nil
end
end
这是一个更完整的例子。您需要在@dm
块之外声明before
才能使其可用。
class DomainManager
attr_reader :domains
def initialize(domains)
@domains = domains
end
end
describe DomainManager do
@dm = DomainManager.new( %w(example.com example.org))
@dm.domains.each do |dom|
it "should know the username for #{dom} in the list" do
ENV['C_USERNAME_' + dom].should_not be_nil
end
end
end