2012-01-06 42 views
3

很好,如果Capybara可以与DOM接口,并且我的应用程序通过AJAX提交表单并返回一些JSON,那么Capybara可以看到这些吗?我没有找到任何方式在Capybara API中获得AJAX响应。水豚click_button的作品,但我如何评估JSON响应?

下面是一个例子还挺我在做什么:

# Cucumber step_definition 
Then(/^I should be able to create a household$/) do 
    click_link 'Next' 
    page.should have_selector 'form#household-form' 
    fill_in 'Name', with: name = Faker::Name.last_name 
    click_button 'Create' 
    page.wait_until do 
    page.evaluate_script('$.active') == 0 # really awesome hack to wait for ajax 
    end 
    @user.reload.households.first.name.should eq name 
end 

我不想再次命中数据库来测试的结果,而是做这样的事情:

xhr.response_data.should be_json 

验证我的JSON响应是我认为应该的。

我只是在这里试验,试着去适应黄瓜和水豚。

+0

所以我认为这是不可能的? – wulftone 2012-01-13 20:33:06

+0

我有同样的问题。你有没有同时找到任何信息? – 2012-11-01 08:23:28

回答

3

你应该标记您的方案/功能,作为一个JavaScript功能,通过标记它@javascript运行:

@javascript 
Scenario: Title goes here 

这是什么会做的是告诉黄瓜运行硒webdriver的宝石,将推出一个真正的浏览器(Firefox)并在该浏览器内运行测试。浏览器当然会评估JavaScript,然后Capybara将能够看到它输出的内容。

+0

是的,我已经在场景定义之上有'@ javascript',这一切都很好,除了我想知道如何在发生JSON响应后(并且可能跟踪过程中的dom事件)。 AJAX响应不会影响页面上的任何内容,所以我不能使用“页面”来评估发生的事情。 – wulftone 2012-01-06 05:58:21