首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VoltRB rspec测试方法无法将Promise转换为数组

VoltRB rspec测试方法无法将Promise转换为数组
EN

Stack Overflow用户
提问于 2015-07-02 02:57:49
回答 2查看 102关注 0票数 2

我正在尝试对我的模型中的一个方法进行一些rspec单元测试。该方法返回一个promise,解析后返回人员的姓名。方法不是问题所在,因为我知道它工作正常。下面是我的测试代码:

代码语言:javascript
复制
it 'should return correct name' do
  report = Report.new(first_name: 'Testy', last_name: 'Testerson')
  report.save!
  expect(report.name).to eql('Testy Testerson')
end

当我测试它时,我得到以下错误:

代码语言:javascript
复制
Failure/Error: expect(report.name).to eql('Testy Testerson')
TypeError:
  can't convert Promise to Array (Promise#to_ary gives Promise)

在调试时,我使用下面这行代码来检查该方法的返回值:

代码语言:javascript
复制
puts report.name.inspect

我得到的回应如下:

代码语言:javascript
复制
#<Promise(70319926955580): "Testy Testerson">

错误似乎正在发生,因为它会根据期望值测试promise。为什么我会得到这个错误?

EN

回答 2

Stack Overflow用户

发布于 2015-07-02 03:40:18

使用report.name.value解决了此问题

票数 1
EN

Stack Overflow用户

发布于 2015-07-02 04:52:44

在服务器上运行代码时,对store的调用会返回一个已解析的promise。但是在客户端,这个承诺还不会被解决。有人(忘记atm这个名字)正致力于将promise直接添加到opal-rspec中,但目前返回的promise不会等待opal-rspec。一旦计划准备就绪,我们将在volt中添加更多工具,使开发人员更容易在MRI和opal中进行测试(就像我们对Volt本身所做的那样)。

您可以在promise上调用.value以获取其值,但前提是promise已解析。更安全的方法是使用.then块:

代码语言:javascript
复制
report.name.then do |name|
  expect(name).to eq('Bob')
end

希望这能有所帮助。

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

https://stackoverflow.com/questions/31169480

复制
相关文章

相似问题

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