我正在尝试对我的模型中的一个方法进行一些rspec单元测试。该方法返回一个promise,解析后返回人员的姓名。方法不是问题所在,因为我知道它工作正常。下面是我的测试代码:
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当我测试它时,我得到以下错误:
Failure/Error: expect(report.name).to eql('Testy Testerson')
TypeError:
can't convert Promise to Array (Promise#to_ary gives Promise)在调试时,我使用下面这行代码来检查该方法的返回值:
puts report.name.inspect我得到的回应如下:
#<Promise(70319926955580): "Testy Testerson">错误似乎正在发生,因为它会根据期望值测试promise。为什么我会得到这个错误?
发布于 2015-07-02 03:40:18
使用report.name.value解决了此问题
发布于 2015-07-02 04:52:44
在服务器上运行代码时,对store的调用会返回一个已解析的promise。但是在客户端,这个承诺还不会被解决。有人(忘记atm这个名字)正致力于将promise直接添加到opal-rspec中,但目前返回的promise不会等待opal-rspec。一旦计划准备就绪,我们将在volt中添加更多工具,使开发人员更容易在MRI和opal中进行测试(就像我们对Volt本身所做的那样)。
您可以在promise上调用.value以获取其值,但前提是promise已解析。更安全的方法是使用.then块:
report.name.then do |name|
expect(name).to eq('Bob')
end希望这能有所帮助。
https://stackoverflow.com/questions/31169480
复制相似问题