RSpec空?方法

RSpec empty? method

请告诉我如何使用 Rspec

为该方法编写测试
def to_s
    display_name.empty? ? legal_name : display_name
 end

我是新手,刚开始 RSpec 测试

更新

我的尝试:

describe "display name" do
    it "display name empty" do
      legal_name.to_s
      expect(display_name).to be_empty
    end
  end

只检查了一部分

我知道这是不正确的,但我尝试了很多选择

legal_namedisplay_name是一个对象的方法,所以需要做一个对象来测试。我不知道你在测试什么 class,所以我们称它为 SomeClass。

describe SomeClass do
  # Now when you reference `object` this block of code will run,
  # but only once per test.
  # See https://relishapp.com/rspec/rspec-core/docs/helper-methods/let-and-let
  let(:object) {
    # Or however you create the object.
    SomeClass.new
  }
end

当对象的 display_name 方法是否为空时,您正在测试 to_s 方法的行为。所以我们至少有两个“上下文”。

  1. 当display_name为空时。
  2. 当display_name不为空时。
describe SomeClass do
  let(:object) {
    SomeClass.new
  }

  # We're testing its to_s method, not display_name.
  describe '#to_s' do
    # These are the conditions we're going to test.
    # They're just stubs for now.
    context 'when display_name is empty'
    context 'when display_name is not empty'
  end
end

现在脚手架已经就位,我们可以在每个上下文中使用 before hook 设置对象,其中包含每次测试前 运行 的代码。我不知道如何在您的代码中做到这一点,我只是猜测一下。

describe SomeClass
  let(:object) {
    SomeClass.new
  }

  describe '#to_s' do
    context 'when display_name is empty' do
      # This will run before each test in this context block
      # to make object.display_name empty.
      before do
        object.display_name = ''
        object.legal_name = 'something'
      end
    end

    context 'when display_name is not empty' do
      # This will run before each test in this context block
      # to make object.display_name not empty.
      before do
        object.display_name = 'something'
        object.legal_name = 'something else'
      end
    end
  end
end

现在在每个上下文中 object 都将正确设置。

最后,添加测试。调用 to_s 并确保它 returns 是预期值,可以是 display_name 中的值,也可以是 legal_name.

中的值
describe SomeClass
  let(:object) {
    SomeClass.new
  }

  describe '#to_s' do
    context 'when display_name is empty' do
      before do
        object.display_name = ''
        object.legal_name = 'legal'
      end

      it 'uses legal_name' do
        expect(object.to_s) to eq 'legal'
      end
    end

    context 'when display_name is not empty' do
      before do
        object.display_name = 'display'
        object.legal_name = 'legal'
      end

      it 'uses display_name' do
        expect(object.to_s) to eq 'display'
      end
    end
  end
end

脚手架很多,但是很清楚测试的是什么情况

作为最后的说明,考虑另一个上下文...

    context 'when display_name is blank' do
      before do
        object.display_name = ' '
        object.legal_name = 'legal'
      end
    end

那里应该发生什么?查看 blank?.