Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设计助手的Rspec测试-设计错误消息_Rspec_Ruby On Rails 4_Capybara - Fatal编程技术网

设计助手的Rspec测试-设计错误消息

设计助手的Rspec测试-设计错误消息,rspec,ruby-on-rails-4,capybara,Rspec,Ruby On Rails 4,Capybara,我有以下助手: def devise_error_messages! return "" if resource.errors.empty? messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join sentence = I18n.t("errors.messages.not_saved", :count => re

我有以下助手:

def devise_error_messages!
    return "" if resource.errors.empty?

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
    sentence = I18n.t("errors.messages.not_saved",
                      :count => resource.errors.count,
                      :resource => resource.class.model_name.human.downcase)

    html = <<-HTML
    <div id="error_explanation" class="alert alert-danger">
      <h2>#{sentence}</h2>
      <ul>#{messages}</ul>
    </div>
    </br>
    HTML

    html.html_safe
  end
def设计错误消息!
如果resource.errors.empty返回“”?
messages=resource.errors.full_messages.map{| msg | content_标记(:li,msg)}.join
语句=I18n.t(“错误.消息.未保存”,
:count=>resource.errors.count,
:resource=>resource.class.model_name.human.downcase)

html=我自己想出来的:

require 'spec_helper'

describe DeviseHelper do
  before do
    view.stub(:resource).and_return(User.new)
    view.stub(:resource_name).and_return(:user)
    view.stub(:devise_mapping).and_return(Devise.mappings[:user])
  end

  describe "No Error Message" do
    it { helper.devise_error_messages!.should eql("") }
  end

  describe "Error Message Present" do
    it {
      view.stub(:resource).and_return(User.create)  
      helper.devise_error_messages!.should_not eql("")
    }
  end

end

以下是使用新rspec语法的更新:

require 'rails_helper'

RSpec.describe DeviseHelper, type: :helper do
  before do
    allow(view).to receive(:resource).and_return(User.new)
    allow(view).to receive(:resource_name).and_return(:user)
    allow(view).to receive(:devise_mapping).and_return(Devise.mappings[:user])
  end

  context 'no error messages' do
    it '#devise_error_messages!' do
      expect(helper.devise_error_messages!).to eq("")
    end
  end

  context 'with error messages' do
    it '#devise_error_messages!' do
      allow(view).to receive(:resource).and_return(User.create)
      expect(helper.devise_error_messages!).to_not eq("")
    end
  end
end

我试过了,但它给了我错误,所以我修改了它,就像这样

require 'spec_helper' 

RSpec.describe DeviseHelper, type: :helper do
  let(:resource_name) { (:contact) }
  let(:devise_mapping){ (Devise.mappings[:contact]) }

  context 'no error messages' do
    let(:resource) { (Contact.new) }
    it '#devise_error_messages!' do
      expect(devise_error_messages!).to eq("")
    end
  end

  context 'with error messages' do
    let(:resource) { (Contact.create) } 
    it '#devise_error_messages!' do
      expect(devise_error_messages!).to_not eq("")
    end
  end
end

在我的例子中,模型名是contact