2009-10-01 44 views
3

有没有一种标准或最佳实践的方式来测试rails中的动作是否返回正确的文本?例如,我有一个是用来做AJAX验证,做以下简单的动作:如何断言操作返回正确的文本?

def get_object_id 
    if params[:id].blank? 
    return render(:text => -1, :layout => false) 
    end 

    my_object = MyObject.find_by_id(params[:id].strip) 

    # If the object is valid return the object id 
    if my_object and my_object.active? 
    return render(:text => my_object.id, :layout => false) 
    end 

    # Otherwise, return -1 
    return render(:text => -1, :layout => false) 
end 

现在,我使用的是@应答对象在我的测试...即:

def test_get_object_id_returns_invalid_for_non_existent_id 
    # Act 
    get :get_object_id, :id => 999 

    # Assert 
    assert_response :success 
    assert_equal "-1", @response.body 
end 

但是,虽然大多数人都是新手,但我迄今为止所看到的似乎表明,除了检查@request.body之外,可能还有更好的方法来执行此操作。

所以,我给你的红宝石专家的问题是:这是最好的方式吗?

回答

3

我觉得你的位置已经。

assert_select只适用于XML内容,所以对于其他格式您必须自行打印。如果我正在做很多这些,我可能会添加一个名为断言方法ActionController::TestCase

例如

def assert_response_equals(v) 
    assert_equal v.to_s, @response.body, "Expected response body to be #{v.inspect}" 
end 

这将允许您跳过引号。

+0

这是个好主意。你的意思是ActionController :: TestCase而不是ActionController :: TestClass?我似乎无法找到关于后者的任何文件。 – jerhinesmith 2009-10-01 19:19:30

+0

糟糕,纠正。 – cwninja 2009-10-01 20:04:54