【发布时间】:2020-02-18 11:28:26
【问题描述】:
我想模拟使用Jira-Ruby gem with jql lib的方法
def call
client = JIRA::Client.new(options)
client.Issue.jql(
"project = #{project_key} AND
status != Done AND
status != Closed AND
status != Cancelled AND
status != Followup",
query_options
)
end
我的模拟:
let(:jql_options) do
[
"project = TSW-123 AND
status != Done AND
status != Closed AND
status != Cancelled AND
status != Followup",
query_options
]
end
let(:query_options) do
{
start_at: 0,
max_results: 1000
}
end
let(:jira_client) { instance_double(JIRA::Client) }
let(:issue) { instance_double(JIRA::Resource::Issue) }
let(:issue_factory) { instance_double(JIRA::Resource::Issue) }
before do
allow(JIRA::Client).to receive(:new).with(options).and_return(jira_client)
allow(jira_client).to receive(:Issue).and_return(issue_factory)
allow(issue_factory).to receive(:jql).with(*jql_options).and_return(issue)
end
it 'connect to the project' do
expect(subject.call).to eq(project)
end
我收到一个错误:
JIRA::Resource::Issue 类没有实现实例方法:jql。也许您打算改用
class_double?
【问题讨论】:
-
正如错误所说,
jql方法是一个类方法(在issue_factory定义中定义为self.jql) so, it should work if you changeinstance_double 到class_double。另外,我想你可以说allow(JIRA::Resource::Issue). to receive... -
“另外,我认为你可以”我很确定这是必需的,否则模拟将只是这个本地
issue_factory。