首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rspec测试设计视图

使用rspec测试设计视图
EN

Stack Overflow用户
提问于 2013-01-21 00:47:24
回答 7查看 2.7K关注 0票数 12

我已经生成了运行rails g devise:views的Devise视图,现在想要测试它们。

这就是我的想法:

代码语言:javascript
复制
require 'spec_helper'

describe "devise/sessions/new" do
    before do
        render
    end

    it "renders the form to log in" do
        rendered.should have_selector("form", action: user_session_path, method: :post) do |form|

        end
    end
end

对于render语句,它提供了undefined local variable or method 'resource'。在googling around之后,我发现我应该添加

代码语言:javascript
复制
@user.should_receive(:resource).and_return(User.new)

在render语句之前-但它仍然给我相同的错误,并且我不确定如何使用它。

我做错了什么?谢谢你的帮助。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-01-21 02:20:24

你知道吗?我发现this answer中有人有类似的问题。解决方案是在应用程序帮助器中包含以下代码:

代码语言:javascript
复制
def resource_name
  :user
end

def resource
  @resource ||= User.new
end

def devise_mapping
  @devise_mapping ||= Devise.mappings[:user]
end

这是必要的,因为devise在其控制器中使用了某些辅助方法。然而,如果我从我的规范访问视图,这些辅助方法是不可用的,因此我的测试失败。将这些方法放在应用程序帮助器中,使它们可以在整个应用程序中访问,包括我的规范,甚至测试通过!

票数 6
EN

Stack Overflow用户

发布于 2013-11-12 22:18:48

只是另一种想法,以防任何人遇到同样的问题。我并不热衷于仅仅为了让测试通过而将代码添加到我的助手中,所以我最终在测试中将此代码添加到了之前的代码块中:

代码语言:javascript
复制
before do
  view.stub(:resource).and_return(User.new)
  view.stub(:resource_name).and_return(:user)
  view.stub(:devise_mapping).and_return(Devise.mappings[:user])
end
票数 13
EN

Stack Overflow用户

发布于 2015-07-24 02:16:10

在rspec中,有一个配置不允许您清除未定义的方法。在Rails4中,这甚至是标准行为:

代码语言:javascript
复制
# spec/spec_helper.rb
config.mock_with :rspec do |mocks|
  mocks.verify_partial_doubles = true
end

正因为如此,得票率最高的答案对设备帮助者不起作用。将verify_partial_doubles更改为false或使用实际的帮助器。

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

https://stackoverflow.com/questions/14426746

复制
相关文章

相似问题

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