如何解决RSpec关于新期望语法的弃用警告?

时间:2016-02-13 11:57:47

标签: ruby-on-rails rspec capybara rspec-rails rspec3

当我运行此RSpec示例时,它会通过,但我收到了弃用警告。

context "should have valid detail for signup" do
  it "should give error for invalid confirm password" do
    find("#usernamesignup").set("Any_name")
    find("#mobile_number").set("1234567890")
    find("#emailsignup").set("mymail@yopmail.com")
    find("#passwordsignup").set("12345678")
    find("#passwordsignup_confirm").set("")
    find(".signin").click
    sleep 2
    page.should have_content "Confirm Password Does not Match"
  end
end

这是输出:

弃用警告:

  

使用来自rspec-expectations'旧should语法的:should而不使用   不推荐使用显式启用语法。使用新的:expect   语法或使用:should显式启用config.expect_with(:rspec) { |c| c.syntax = :should }。来自   /home/rails/rails_nimish/Devise_use/spec/features/users_spec.rb:113:in   '阻止(4级)'

enter image description here

如何解决此警告?

更新:溶液 我刚换了

  

page.should have_content“确认密码不匹配”

使用:

expect(page).to have_content "Confirm Password Does not Match"

3 个答案:

答案 0 :(得分:6)

正如消息所说,您有两种选择:

  • 明确配置RSpec以允许.should。不要使用该选项; .should已被弃用,将来可能不会得到很好的支持。但是,如果您真的想要允许.should,可以通过将其添加到spec_helper.rb(或编辑可能已经存在的rspec-mocks的示例配置)来实现:

    RSpec.configure do |config|
      config.expect_with :rspec do |expectations|
        expectations.syntax = :should
      end
    end
    

    如果您想同时使用expect.should,请设置

    expectations.syntax = [:expect, :should]
    

    但是不要这样做,选择一个并在测试套件中的任何地方使用它。

  • 将您的期望重写为

    expect(page).to have_content "Confirm Password Does not Match"
    

    如果您有许多需要升级语法的规范,可以使用the transpec gem自动执行此操作。

旁注:在您的期望之前不要sleep 2Capybara's have_content matcher waits for you.

答案 1 :(得分:5)

我刚换了:

page.should have_content "Confirm Password Does not Match"

使用:

expect(page).to have_content "Confirm Password Does not Match"

答案 2 :(得分:0)

如果您决定清除旧语法,并且是vim类,则可能会发现以下方便;)

argdo %s/ \([^ ]\+\)\.should == \([^}]\+\)\( }\)\?$/ expect(\1).to eql(\2)\3/gc | update
argdo %s/should \(be_\w\+\)/expect(subject).to \1/gc | update