[英]testing for method arguments in rspec
我想知道如何在rspec中使用参数测试方法。 在阅读了SO和Google的一些文章后,我很快意识到, should_recieve
可以解决问题。 由于某些奇怪的原因,尽管它似乎没有按预期工作。 我有可能丢失任何东西吗?
红宝石代码
def new app_name
end
spec.rb文件
describe BackboneGenerator::CLI do
before do
@cli = BackboneGenerator::CLI.new
end
subject { @cli }
it { should_receive(:new).with(:app_name) }
错误
Failure/Error: it { should_receive(:new).with(:app_name) }
(#<RSpec::Core::ExampleGroup::Nested_2:0x007fe8b3c5a690>).new(:app_name)
expected: 1 time with arguments: (:app_name)
received: 0 times with arguments: (:app_name)
PS:我对测试非常满意
匹配器should_receive
并没有完全按照您的想法进行。 它不用于声明要测试的方法的参数。 相反,它用于断言您在测试中执行的操作会导致特定调用间接发生-通常是对单元测试之外的类或方法的调用。 例如,您可能想要断言对IO方法的昂贵调用仅被调用一次,或者肯定使用与您在类的构造函数中设置的文件名相同的文件名。
测试某些参数是否被接受的方法通常是使用这些参数在测试中调用您的方法,并对结果进行断言。
describe BackboneGenerator::CLI do
before do
@cli = BackboneGenerator::CLI.new
end
subject { @cli }
describe "#new" do
it "should accept ( :app_name ) as a parameter" do
expect { subject.new( :app_name ) }.to_not raise_error
# Or, more usually:
# result = subject.new( :app_name )
# result.should *match_some_test_criteria*
end
it "should not accept ( :foo, :bar ) as parameters" do
expect { subject.new( :foo, :bar ) }.to raise_error
end
我认为这不是您要查找的特定测试,但希望它能为您提供一个测试代码模式,以作为您进行实际测试的基础。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.