繁体   English   中英

在rspec中测试方法参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM