新的 Rspec 3 种方法存根模型 (Rails 4.2/Rspec 3.1)

New Rspec 3 way to stub model (Rails 4.2/Rspec 3.1)

在一项 Rspec 测试中(工作正常),我收到弃用警告

Using stub from rspec-mocks' old :should syntax without explicitly enabling the syntax is deprecated. Use the new :expect syntax or explicitly enable :should instead.

我应该如何更改此测试以符合 Rspec 3?

我正在测试字段公司名称 exists/is 不为空,然后我必须验证公司 phone 号码字段是否存在。我曾经使用 'stub' 但它不能正常工作,我想移动到新的 Rspec 3 方式。

/spec/models/company_spec.rb

describe "test on company name" do
  context "test" do
    before { subject.stub(:company_name?) { true } }
    it { is_expected.to validate_presence_of(:company_phone_number) }
  end 
end

要在 RSpec 下存根方法 3 使用 allow/receive:

allow(subject).to receive(:company_name?).and_return(true)

如果您要设置一个期望值,如果 company_name? 从未被调用,该期望值将失败:

expect(subject).to receive(:company_name?).and_return(true)

可能是这样的:

describe "test on company name" do

  context "test" do
    before { allow(subject).to receive(:company_name?).and_return(true) }

    ...
  end 
end