首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试Backbone.js

测试Backbone.js
EN

Code Review用户
提问于 2011-12-29 22:20:11
回答 1查看 425关注 0票数 4

我正在使用Rails 3.1和Backbone.js编写一个(几乎-)单页应用程序。因此,我的大多数控制器返回无根JSON,按照Backbone.js文档提供此设置:

代码语言:javascript
复制
ActiveRecord::Base.include_root_in_json = false

例如,返回的帐户JSON如下所示:

代码语言:javascript
复制
{
  "created_at":"2011-12-27T22:23:17Z",
  "id":1,"name":"My Happy Account",
  "updated_at":"2011-12-27T22:23:17Z"
}

我正在测试这种方法的工作方式如下:

代码语言:javascript
复制
it 'returns the account associated with the current user' do
  get :current, :format => :json

  assert_response(:success)
  account = JSON.parse(response.body)
  account['name'].should == @account_one.name
  account['id'].should == @account_one.id
end

规范通过了,但我禁不住觉得它有点恶心,也许不太地道。有人能给我一个更好的方法吗?

EN

回答 1

Code Review用户

回答已采纳

发布于 2012-01-05 00:17:09

我认为你的测试方法很好。

我的应用程序也是一个单页主干/Rails 3.1应用程序,我的测试与您的类似。我的测试更详细一些--我的目标通常是每个it / specify块中的一个断言--但是测试的实质是相同的:发出请求、解析响应,并根据响应包含的内容和我预期的应该包含的内容进行断言。

这里要问自己的关键问题是,在一个更传统的、多页的、非主干的应用程序中,惯用的控制器测试会是什么样子。在这些测试中,您通常会检查一些内容:

  1. 指定一个特定的值。
  2. 呈现特定的模板,或者重定向到特定的URL
  3. 响应代码与您的期望相匹配。

对于第1项,我认为这相当于解析响应并寻找特定值。RSpec给您提供了assigns语句的优点,它使事情看起来更清晰一些,但在我看来,它的意图与您所做的是一样的。如果需要,您可以很容易地编写自己的糖来包装解析的JSON响应体,因此可以编写类似于json_response(:name).should == @account_one.name的东西,其中json_response是要编写的助手方法的名称。(这个实现基本上相当于解析响应体并查找作为方法参数传递的键的值。)这样做,测试看起来更像那些非骨干应用程序。

第2项不适用于单页主干应用程序,因为您总是在同一个页面上。所以这就完了。

第3项与非主干应用程序相同。你有assert_response(:success),这很好。我喜欢做一些像response.status.should eq(200)这样的事情,或者对我期望的状态代码做任何合适的事情。我发现在我的主干网应用程序的测试中,我检查状态代码比在一个更“传统”的多页应用程序中更频繁,这仅仅是因为我喜欢在可能的情况下返回适当的HTTP状态代码作为Ajax应用程序中的错误响应,而在一个多页应用程序中,我可能会返回200状态,页面上有一些错误信息,比如“电子邮件地址是强制性的”。YMMV,在这方面。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/7287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档