Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rspec 带参数的用户let_Rspec - Fatal编程技术网

Rspec 带参数的用户let

Rspec 带参数的用户let,rspec,Rspec,我想测试这个类: class Response def initialize(raw_response:) ........ end end 我想在rspec中发送多个原始响应。我实现了以下代码: let(:successful_response) { File.read(File.join('spec', 'fixtures', 'xml', 'successful_response.xml')) } ...... let(:response)

我想测试这个类:

class Response

  def initialize(raw_response:)
     ........
  end
end
我想在rspec中发送多个原始响应。我实现了以下代码:

  let(:successful_response)    { File.read(File.join('spec', 'fixtures', 'xml', 'successful_response.xml')) }
  ......
  let(:response)               { described_class.new(raw_response: file_name) }

  context '#response' do

    it 'submits response' do 

      let(:file_name) { :successful_response }              
      expect(:response(raw_response: :file_name).parse_response).to include(................)
    end
  end
但是当我运行代码时,我得到了以下错误:

syntax error, unexpected '(', expecting ')'
expect(:response(raw_response: :file_name).par...
                         ^

如何解决此问题?

以下是您的解决方法:

context 'when response is successful' do
  let(:file_name) { successful_response } 
  it 'submits response' do              
    expect(response.parse_response).to include(...)
  end
end

context 'when response is unsuccessful' do
  let(:file_name) { 'bad.xml' } 
  it 'submits response' do              
    expect(response.parse_response).to include(...)
  end
end
不要在
中使用
中指定它/它将不起作用。如果需要更改不同上下文的值,请使用
context

您可以考虑让
定义一个记忆化的方法

let(:response) { described_class.new(raw_response: filename) }
let(:filename) { :foo }
就像

def response 
  described_class.new(raw_response: filename)
end

def filename
  :foo
end

上面的答案一次解决了几个格式问题,但只想指出,OP得到的具体错误是:

语法错误,意外的“(”,应为“)”
预期:(响应(RWYRAPIO::FILILNEX)…PAR…<代码> < /P>
是因为
:response
是一个
符号
,而不是您可以传递参数的对象,因此
是意外的

如果您确实想测试某个
符号
的某些内容,那么它可以工作,但需要注意的是,这只是测试符号本身,而不是
let
变量。

期望(:请求)。成为(符号)

response
是如何访问由
let
创建的变量:

期望(response.parse_response).包含(…)