我在试图弄清楚我的应用程序目前的情况时遇到了一些实际问题我试图确保我可以在“编辑配置文件”页面上显示不同的内容,这取决于用户使用的注册方法(OAuth与否)。
在浏览器中手动测试时,我只需向用户模型添加一个OAuth属性并对其进行测试,就可以让它正常工作。
然而,在rspec中,我无法正确地测试它。事实上,无论我告诉它在页面上查找什么元素,它都会声称它们在那里是正确的。

describe "edit user" do

  let(:user) { FactoryGirl.create(:user) }
  before { sign_in user }

  describe "correct edit account options shown to normal users" do
    before do
      visit edit_user_registration_path(:user)
    end

    it { should have_selector('h2',      text: 'Edit User') }
    it { should have_selector('input',   id:   'user_names')}
    it { should have_selector('input',   id:   'user_email', value: user.email) }
    it { should have_selector('input',   id:   'user_password') }
    it { should have_selector('input',   id:   'user_password_confirmation') }
    it { should have_selector('input',   id:   'user_current_password') }
    it { should have_selector('input',   type: 'submit') }
  end

  describe "correct edit account options shown to oauth users" do

    before do
      user.update_attributes!(:oauth => true)
      visit edit_user_registration_path(:user)
    end

    it { should have_selector('h2',          text: 'Edit User') }
    it { should have_selector('input',       id:   'user_names')}
    it { should_not have_selector('input',   id:   'user_email') }
    it { should_not have_selector('input',   id:   'users_password') }
    it { should_not have_selector('input',   id:   'users_password_confirmation') }
    it { should_not have_selector('input',   id:   'user_current_password') }
    it { should have_selector('input',       type: 'submit') }
  end
end

我的rspec集成测试的完整代码如下:https://gist.github.com/2556055
如能提供帮助,我们将不胜感激。

最佳答案

幸运的是,在rubyonrails有人帮忙解决了这个问题
原因是have_selector不接受多个参数(因此为什么它与id没有区别)因此,它们应该替换为have-css方法。
因此,正确的实施方法是:

describe "edit user" do
let(:user) { FactoryGirl.create(:user) }
before { sign_in user }

describe "correct edit account options shown to normal users" do
 before do
    visit edit_user_registration_path(:user)
 end
 it { should have_selector('h2',      text: 'Edit User') }
 it { should have_css('input#user_name')}
 it { should have_css('input#user_email') }
 it { should have_css('input#user_password') }
 it { should have_css('input#user_password_confirmation') }
 it { should have_css('input#user_current_password') }
 it { should have_selector('input',   type: 'submit') }
end

describe "correct edit account options shown to oauth users" do

before do
  user.update_attributes!(:oauth => true)
  visit edit_user_registration_path(:user)

end

  it { should have_selector('h2', text: 'Edit User') }
  it { should have_css('input#user_name')}
  it { should_not have_css('input#user_email') }
  it { should_not have_css('input#users_password') }
  it { should_not have_css('input#users_password_confirmation') }
  it { should_not have_css('input#user_current_password') }
  it { should have_selector('input', type: 'submit') }
 end
 end

关于ruby-on-rails - RSpec对页面上的元素抛出误报,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10379538/

10-13 04:53