У меня есть следующий код:Nokogiri скребковый тест не работает?
url = "http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dpets&field-keywords="
data = Nokogiri::HTML(open(url))
department = data.css('#ref_2619534011')
@department_hash = {}
department.css('li').drop(1).each do | department |
department_title = department.css('.refinementLink').text
department_count = department.css('.narrowValue').text[/[\d,]+/].delete(",").to_i
@department_hash[:department] ||= {}
@department_hash[:department]["Pet Supplies"] ||= {}
@department_hash[:department]["Pet Supplies"][department_title] = department_count
end
Так что, когда я делаю это <%= @department_hash %>
в шаблоне я получаю это:
{:department=>{"Pet Supplies"=>{"Birds"=>15918, "Cats"=>245418, "Dogs"=>513869, "Fish & Aquatic Pets"=>47182, "Horses"=>14774, "Insects"=>358, "Reptiles & Amphibians"=>5834, "Small Animals"=>19806}}}
Я создал спецификацию для app.rb
(я использую Sinatra):
app_spec.rb:
require File.dirname(__FILE__) + '/app.rb'
describe "Department" do
it "should scrap correct string" do
expect(@department_hash).to eq '{:department=>{"Pet Supplies"=>{"Birds"=>15918, "Cats"=>245418, "Dogs"=>513869, "Fish & Aquatic Pets"=>47182, "Horses"=>14774, "Insects"=>358, "Reptiles & Amphibians"=>5834, "Small Animals"=>19806}}}'
end
end
Но тест не пройден:
1) Department should scrap correct string
Failure/Error: expect(@department_hash).to eq '{:department=>{"Pet Supplies"=>{"Birds"=>15918, "Cats"=>245418, "Dogs"=>513869, "Fish & Aquatic Pets"=>47182, "Horses"=>14774, "Insects"=>358, "Reptiles & Amphibians"=>5834, "Small Animals"=>19806}}}'
expected: "{:department=>{\"Pet Supplies\"=>{\"Birds\"=>15918, \"Cats\"=>245418, \"Dogs\"=>513869, \"Fish & Aquatic Pets\"=>47182, \"Horses\"=>14774, \"Insects\"=>358, \"Reptiles & Amphibians\"=>5834, \"Small Animals\"=>19806}}}"
got: nil
(compared using ==)
# ./app_spec.rb:5:in `block (2 levels) in <top (required)>'
EDIT:
Я попытался это:
expect(@department_hash[:department]["Pet Supplies"].keys).to eq '["Birds", "Cats", "Dogs", "Fish & Aquatic Pets", "Horses", "Insects", "Reptiles & Amphibians", "Small Animals"]'
Но тест терпит неудачу также:
2) Department should scrap correct keys Failure/Error: expect(@department_hash[:department]["Pet Supplies"].keys).to eq '["Birds", "Cats", "Dogs", "Fish & Aquatic Pets", "Horses", "Insects", "Reptiles & Amphibians", "Small Animals"]' NoMethodError: undefined method
[]' for nil:NilClass # ./app_spec.rb:9:in
block (2 levels) in '
Что может быть причиной ?
Есть ли способ сделать это, не перемещая весь мой файл на тест? Вот почему я включил его наверху. – alexchenco
Вы можете извлечь код приложения в методы и/или классы (они могут находиться в файле app.rb). Затем из теста вы будете называть эти методы/классы. В ответ добавлен быстрый пример. –
Спасибо большое! Я попробую и скажу вам результаты. – alexchenco