Rspec在FactoryGirl的特征中存根

时间:2013-10-22 15:23:33

标签: ruby-on-rails ruby rspec factory-bot stub

我有以下rspec测试,我正在尝试在其中存根api方法。我在FactoryGirl的特征中定义了stub,并在(:build)回调之后使用。

  describe '#get_json_from_api' do
    let(:output_file) { video_file.json_path }
    context "when api works" do
      around(:each) do |rspec_test|
        File.delete(output_file) if File.exists?(output_file)
        rspec_test.run
        File.delete(output_file) if File.exists?(output_file)
      end
      let!(:searched_video_file) {
        create(:video_file, :stub_api)
        video_file.get_json_from_api
        video_file
      }
      it { expect(File.size?(output_file)).to be > 0 }
    end
  end

这是工厂:

 factory :video_file do
    trait :stub_api do
      after(:build) do |vf|
        vf.stub(:get_json_from_api){
          puts "i am callled!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
          File.open(vf.json_path, "w") do |f|
           f.write ["some data","more data"].to_json
          end
        }
      end
    end
 end

Stubbing永远不会发生,rspec测试失败。但是,如果我删除一个特征并简单地离开,一切都按照需要工作:

 factory :video_file do
      after(:build) do |vf|
        vf.stub(:get_json_from_api){
          puts "i am callled!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
          File.open(vf.json_path, "w") do |f|
           f.write ["some data","more data"].to_json
          end
        }
      end
 end

1 个答案:

答案 0 :(得分:0)

这样的存根不属于FactoryGirl,你应该在你的rspec测试中存根。