使用水豚和网络模拟导轨应用程序进行测试

时间:2015-10-24 14:32:58

标签: ruby-on-rails testing rspec mocking capybara

您好! 我有一个rails api和一个主干上的前端。 我的api拨打外部api来获取一些资源。

我想对capybara中的完整应用进行集成测试。我正在使用网络模拟。

剪掉了我的spec_helper:

WebMock.disable_net_connect!(allow_localhost: true)

RSpec.configure do |config|
  config.before(:each) do
    stub_request(:get, "url.com/live/en/live/list.json").
      with(headers: {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
      to_return(status: 200, body: body, headers: {})
  end  
(...)
end

def body
  "{\"version\":\"9\",\"sports\":[{\"id\":101,\"title\":\"Football\"},{\"id\":100,\"title\":\"Tenis\"}]}"
end

我的功能测试:

feature 'sports displayment' do
  scenario 'user access to the site' do
    visit root_path

    expect(page).to have_text("Football")
  end
end

显示的错误是expected to find text "Football" in "" 如果我在控制器上嵌入binding.pry它就不起作用(意味着它没有通过它。

我确信该应用有效,所以这是一个测试问题。

指向应用https://github.com/gerard-morera/bet_play

的链接

------- ------- EDIT

我一直在尝试一些合理的新事物,但仍然无效。 我添加了selenium,因为默认的capybara潜水员不支持js,我添加了wait_for_ajax,一个方法,以确保capybara正在等待ajax请求,我也为此场景启用了js:

require 'rails_helper'

feature 'sports displayment' do

  before(:all) do
    Capybara.current_driver = :selenium
  end

  scenario 'user access to the site', js: true do
    visit '/'

    wait_for_ajax

    expect(page).to have_text("Football")
  end
end

1 个答案:

答案 0 :(得分:0)

你应该试试

expect(page).to have_content("Football")