首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rails rspec未定义的用于#<RSpec::ExampleGroups的“接收”方法:

Rails rspec未定义的用于#<RSpec::ExampleGroups的“接收”方法:
EN

Stack Overflow用户
提问于 2018-04-30 09:22:29
回答 1查看 1.8K关注 0票数 1

我想测试某些实例没有接收到特定的方法调用。试着

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RSpec.describe 'something' do
  before { subject.stubs(foo: 'bar') }
  it { is_expected.to_not receive(:foo) }
end

给我

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Failure/Error: it { is_expected.to_not receive(:foo) }

NoMethodError:
  undefined method `receive' for #<RSpec::ExampleGroups::Something:0x0000000010391588>

并试图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RSpec.describe 'something else' do
  before { subject.stubs(foo: 42) }
  it { subject.expects(:foo).never; subject.foo }
end

传球。我做错了什么?

我被message' for #引导到了当前的不工作解决方案,并且我正在使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RSpec 3.7
  - rspec-core 3.7.1
  - rspec-expectations 3.7.0
  - rspec-mocks 3.7.0
  - rspec-support 3.7.1

更新1:我使用的是webmock而不是rspec-mocks

更新2:我正在使用webmockmocha

更新3:谢谢你的解释,@engineersmnky!不幸的是,对于我的特定用例,我仍然需要对方法进行存根。为什么这个还在过去?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require 'rspec'
require 'mocha'

RSpec.configure do |config|
  config.mock_with :mocha
end

RSpec.describe 'something' do
  # passes
  it 'can hide from foo' do 
    subject.stubs(:foo)
    expects(:foo).never
    subject.foo
  end
end

不同之处在于,我试图表达,我期望信号:foo永远不会被发送。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-30 11:27:59

好的,这里有两个问题。首先,您正在尝试使用rspec期望值语法和mocha作为您的模拟框架工作。这导致:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
undefined method `receive' for #<RSpec::ExampleGroups::Something:0x0000000010391588>

错误,因为mocha不知道receivemocha的语法应该是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
it { expects(:foo).never }  

您的下一个问题是,前置块正在阻塞foo,因此它永远不会到达接收方。因此,您的第二个案例通过了,因为subject实际上从未接收到foo,因为固执拦截了调用。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require 'rspec'
require 'mocha'

RSpec.configure do |config|
  config.mock_with :mocha
end

def stub_obj(obj,method_list)
  Class.new(SimpleDelegator) do 
      method_list.each do |k,v| 
          define_method(k) {v}
      end
  end.new(obj)
end

RSpec.describe 'something' do

  subject {mock('subject')}
  #passes 
  it { expects(:foo).never }
  # fails 
  it { subject.expects(:foo).never; subject.foo }
  # passes 
  it 'can hide from foo' do 
    subject.stubs(:foo)
    subject.expects(:foo).never
    subject.foo
  end

  context 'kind of like this' do
    # passes
    it 'hides with a stubbed method' do
      stubber = stub_obj(subject, foo: 'bar')
      subject.expects(:foo).never
      stubber.foo
    end
    # fails 
    it 'cannot hide from a non-stubbed method' do
      stubber = stub_obj(subject, foo: 'bar')
      subject.expects(:bar).never
      stubber.bar
    end
  end
end

下面是Object#stubs的实现,如果您感兴趣的话,尽管它做的比我的示例(#stub_obj)多一点,但是通过Mocha::Mockery对象,概念是相同的。

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

https://stackoverflow.com/questions/50105319

复制
相关文章
Rails测试:Rspec
One: Case Study Debug sucks, and test rocks! If you use rails, then you should know how to use RSpec to test your rails app. I use a simple case to practice basic RSpec. If you want practice, go to check the saasbook/bdd-tdd-cycle practice at the end of th
用户2183996
2018/06/28
1.1K0
Effective Testing with RSpec 3(介绍)
我们的测试再次被打破!”“为什么套件需要这么长时间才能运行?”“无论如何,我们从这些测试中获得了什么价值?”
不知雨
2018/09/06
2K0
GitLabCI系列之流水线语法第五部分
用于指定在作业成功或者失败时应附加到作业的文件或目录的列表。作业完成后,工件将被发送到GitLab,并可在GitLab UI中下载。
DevOps云学堂
2020/05/22
3.5K0
GitLabCI系列之流水线语法第五部分
Effective Testing with RSpec 3 (英文版)(序言)
Early praise for Effective Testing with RSpec 3
不知雨
2018/09/06
1.2K0
Rails 3 Script/ 改版
相信如果之前用过 2.* rails 的人都知道. 我们习惯用 ./script/generate [xxxx] 或者 ./script/* [xxxx].
py3study
2020/01/10
7.1K0
Rails资源
Rails Resources Here I list some rails resources I found very helpful. Quick Start Ruby on Rails Guides Rails Bridge Tutorials Point Book The Rails 4 Way, Best rails book. Ruby on Rails Tutorial API Ruby on Rails API Screencast Rails Casts, excellent rai
用户2183996
2018/06/28
8530
使用spring提高rails开发效率
###声明 目前spring只支持MRI 1.9.3, MRI 2.0.0, Rails 3.2,没有达到要求的人赶紧升级你们的ruby,rails版本吧 ###问题 想必采用TDD/BDD方式进行开发的rails开发者都有着这样类似的经历: pair写了一个测试 运行测试 等待 该我来编写产品代码 运行测试 等待 代码有bug 测试失败 修复测试 运行测试 等待 测试通过,yeah! 再回过头来想想,我享受这段pair的过程吗? pair很给力,很快就把一个taks实现成一个测试用例 桌子上的水果也很好吃
ThoughtWorks
2018/04/18
3.5K1
使用 YAML 文件配置 Jenkins 流水线
几年前,我们的 CTO 写了一篇关于使用 Jenkins 和 Docker 为 Ruby On Rails 应用提供持续集成服务的文章。这些年,我们一直使用这个 CI 流水线解决方案,直到我们最近决定做一次升级。为什么呢?
LinuxSuRen
2019/04/19
4.8K0
使用 YAML 文件配置 Jenkins 流水线
RubyMine 2023 Ruby和Rails集成开发环境
RubyMine 2023.1 包含 Rails 7 和 Ruby 3.2 支持、新 UI 更新、更快的代码补全、更少的内存消耗、WSL 上改进的 gem 同步、更便捷的导航、在 RSpec 中使用共享上下文和示例的功能,以及增强的 Docker 集成。
用户10121095
2023/04/02
1.3K0
gitlab .gitlab-ci.yml 文件赏析
前端 ci https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/frontend.gitlab-ci.yml
拿我格子衫来
2022/01/24
7030
GitLab CI / CD管道配置参考 .gitlab-ci.yml文件定义字段
使用在每个项目中调用的YAML文件配置GitLab CI / CD 管道.gitlab-ci.yml。
拿我格子衫来
2022/01/24
22.3K0
Effective Testing with RSpec 3 (第一部分:入门)
RSpec 3是一个高效的Ruby测试框架。 我们说生产效率很高,因为关于它的一切 - 它的样式,API,库和设置 - 都是为了在编写出色的软件时为你提供支持。
不知雨
2018/09/06
2K0
.gitlab-ci.yml关键词完整解析(二)
上次我们介绍了 script, image, artifacts ,tags, cache ,stage ,when ,only/except。 学习了这几个关键词的用法,就不难配置一条简单的流水线。但如果要遇到更加复杂的业务场景,如微服务,流水线继承,多流水线,等复杂场景,那么只靠以上的几个用法是无法实现的。下面我就再给大家讲解其他几个更加复杂的关键词。 这次讲解的关键词有 before_script, after_script, dependencies, environment, extends, include, interruptible ,parallel, rules ,trigger, services
拿我格子衫来
2022/01/23
1.6K0
使用Gitlab Template增强GitLab CICD的扩展性和兼容性
Func: 用于引入.yml或.yaml结尾的YAML文件,其他类型的文件不能引入。我们可以利用include让.gitlab-ci.yml文件的结构更清晰,同时也可以把一些需要集中管理维护的job写在一个YAML文件中,放在一个公共仓库,让其他项目的CI来引入该文件。
公众号: 云原生生态圈
2020/12/29
2.4K0
使用Gitlab Template增强GitLab CICD的扩展性和兼容性
复制的官方GitLab 文档
stage: Verify group: Continuous Integration info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments type: reference
拿我格子衫来
2022/01/24
2.4K0
GitLabCI系列之流水线语法第六部分
如果needs:设置为指向因only/except规则而未实例化的作业,或者不存在,则创建管道时会出现YAML错误。
DevOps云学堂
2020/05/22
3K0
GitLabCI系列之流水线语法第六部分
GitLabCI系列之流水线语法第四部分
用来指定需要在job之间缓存的文件或目录。只能使用该项目工作空间内的路径。不要使用缓存在阶段之间传递工件,因为缓存主要是存储编译项目所需的运行时依赖项。
DevOps云学堂
2020/05/22
2.3K0
GitLabCI系列之流水线语法第四部分
“小众”之美——Ruby在QA自动化中的应用
总第242篇 2018年 第34篇 前言 关于测试领域的自动化,已有很多的文章做过介绍,“黑科技”也比比皆是,如通过Java字节码技术实现接口的录制,Fiddler录制内容转Python脚本,App中的插桩调试等,可见角度不同,对最佳实践的理解也不一样。这里想要阐述的是,外卖(上海)QA团队应用相对“小众”的Ruby,在资源有限的条件下实现自动化测试的一些实践与经验分享。 背景 加入外卖上海团队时,共2名QA同学,分别负责App与M站的功能测试,自动化测试停留在学习北京侧接口测试框架的阶段,实效上近乎为0
美团技术团队
2018/06/07
1.9K0
GitLab 是如何用 Headless Chrome 测试的
下面的例子介绍了GitLab如何切换到Headless Chrome GitLab最近从PhantomJS转变为Headless Chrome,用于前端测试和RSpec功能测试(ruby测试框架)。在这篇文章中,我们会详细介绍这个变化的原因,面临的挑战,以及解决方案。我们希望这能帮助其他人也能进行类似的转变。 我们现在有一个真实可靠的方法在现代浏览器中测试GitLab。当直接运行在Chrome的时候,这个方法已经提高写测试和调试的能力。还迫使我们去面对和清理一些在测试中的hacks(技巧)。 背景 Phan
DevOps时代
2018/02/02
3.2K0
GitLab 是如何用 Headless Chrome 测试的
实现一个简单的Database4(译文)
译注:cstsck在github维护了一个简单的、类似SQLite的数据库实现,通过这个简单的项目,可以很好的理解数据库是如何运行的。本文是第四篇,主要是使用rspec对目前实现的功能进行测试并解决测试出现BUG
GreatSQL社区
2023/02/23
1.5K0

相似问题

用于#<RSpec::ExampleGroups的Rails rspec未定义方法

10

用于#<RSpec::ExampleGroups的Rails rspec未定义方法`receive_message::

10

rails 2.3 rspec 1.3未定义用于#<RSpec::ExampleGroups的方法‘`get’::

11

用于#<RSpec::ExampleGroups::UserName:>的未定义方法“构建”

21

Rspec规范失败-- RSpec的未定义方法“权限”::ExampleGroups::UserPolicy:Class (NoMethodError)

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文