Почему заглушка используется только в первом тесте? - PullRequest
0 голосов
/ 29 января 2019

У меня есть тест rspec, который заглушает клиента S3.Я могу успешно заглушить метод на этом клиенте (скажем, метод A), во втором тесте я хочу заглушить другой метод (скажем, метод B).Однако второй тест никогда не использует заглушку.Если я переключаю порядок тестов, второй никогда не использует метод stubbed, независимо от его функциональности (скажем, я тестирую B до того, как A, B пройдет, а A потерпит неудачу).Что дает?

require 'spec_helper'


describe ANY_S3_ACCESSOR_CLASS do

  before(:each) do
    @bucket = 'any_bucket'
    @key = 'any_key'
    @s3_double = Aws::S3::Client.new(stub_responses: true)
    Aws::S3::Client.stub(:new).with(anything).and_return(@s3_double)
  end

  context "getting an S3 document" do
    it "should get an S3 document successfully" do
      expected_get_output = 'any_output'
      @s3_double.stub(:get_object).with(anything).and_return(expected_get_output)
      returned_document = NY_S3_ACCESSOR.instance.get_document(@bucket, @key)

      expect(returned_document).to eq(expected_get_output)
    end
  end

  context "putting an S3 document" do
    it "should put a file saved locally to disk to S3 successfully" do
      expected_put_output = 'any_put_output'
      csv_file = CSV.open("#{Rails.root}/test/fixtures/any_well_formed_csv.csv")
      @s3_double.stub(:put_object).with(anything).and_return(expected_put_output)
      actual_put_output = NY_S3_ACCESSOR.instance.write_local_file(@bucket, @key, csv_file.path)

      expect(actual_put_output).to eq(expected_put_output)
    end
  end
end

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Это потому, что тестируемый класс был одноэлементным.Я следовал приведенным здесь указаниям ( Сброс одноэлементного экземпляра в Ruby ) для модульного тестирования синглтона.

0 голосов
/ 29 января 2019
@s3_double = Aws::S3::Client.new(stub_responses: true)
Aws::S3::Client.stub(:new).with(anything).and_return(@s3_double)

Разве эти строки не перевернуты?В любом случае, похоже, что @ s3_double не всегда то, что вы ожидаете.Я бы черт побери отошел от случая к случаю успеха и неудачи и посмотрел бы, как это выглядит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...