如何在 rspec 测试中访问实例变量
How to access instance variables in rspec tests
如何在我的 rspec 测试中访问 pic
?我不断收到以下错误:
F
Failures:
1) TrelloToAc::Card#pic return pic url from trello card
Failure/Error: expect(result).to be_a String
expected :pic to be a kind of String
# ./spec/services/trello_to_ac/card_spec.rb:17:in `block (3 levels) in <top (required)>'
Finished in 1.97 seconds (files took 13.5 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/services/trello_to_ac/card_spec.rb:14 # TrelloToAc::Card#pic return pic url from trello card
它似乎是从字面上理解 pic
,就像一个字符串。这是我的代码:
测试:
require 'rails_helper'
RSpec.describe TrelloToAc::Card do
describe '#pic' do
it 'return pic url from trello card' do
result = @pic
puts result
expect(result).to be_a String
end
end
end
正在测试的代码:
class TrelloToAc::Card
#
#
def pic
@pic ||= card.attachments.last.url if card.attachments.any?
end
#
#
end
我就是这样解决这个问题的。我认为这更符合我的一些评论者所说的内容。这也提供了有关 pic
上下文的更多信息
测试:
require 'rails_helper'
RSpec.describe TrelloToAc::Card do
let(:trello_card) do
cassette = 'trello_to_ac/cards/get'
VCR.use_cassette(cassette, match_requests_on: [:method]) do
Trello::Card.find 'itZmoIG4'
end
end
let(:email_sent_label) do
cassette = 'trello_to_ac/labels/get'
VCR.use_cassette(cassette, match_requests_on: [:method]) do
Trello::Label.find '60db99d5230c123a1ab808d0'
end
end
let(:trello_to_ac_card) do
TrelloToAc::Card.new(trello_card, 32188, 147, email_sent_label)
end
describe '#pic' do
it 'returns pic url from trello card' do
cassette = 'trello_to_ac/attachments/get'
result = VCR.use_cassette(cassette, match_requests_on: [:method]) do
trello_to_ac_card.pic
end
expect(result).to be_a String
end
end
end
实际代码:
class TrelloToAc::Card
attr_reader(
:card, :order_number, :list_ac_campaign_id, :email_sent_label
)
def initialize(card, order_number, list_ac_campaign_id, email_sent_label)
@card = card
@order_number = order_number
@list_ac_campaign_id = list_ac_campaign_id
@email_sent_label = email_sent_label
end
def send_email_if_needed
#
#
attach_trello_pic_to_ac_contact if pic
#
#
end
def pic
@pic ||= card.attachments.last.url if card.attachments.any?
end
end
这样我测试的是 class 的实例,而不是 实例变量 。我对其他方法也有类似的测试。
如何在我的 rspec 测试中访问 pic
?我不断收到以下错误:
F
Failures:
1) TrelloToAc::Card#pic return pic url from trello card
Failure/Error: expect(result).to be_a String
expected :pic to be a kind of String
# ./spec/services/trello_to_ac/card_spec.rb:17:in `block (3 levels) in <top (required)>'
Finished in 1.97 seconds (files took 13.5 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/services/trello_to_ac/card_spec.rb:14 # TrelloToAc::Card#pic return pic url from trello card
它似乎是从字面上理解 pic
,就像一个字符串。这是我的代码:
测试:
require 'rails_helper'
RSpec.describe TrelloToAc::Card do
describe '#pic' do
it 'return pic url from trello card' do
result = @pic
puts result
expect(result).to be_a String
end
end
end
正在测试的代码:
class TrelloToAc::Card
#
#
def pic
@pic ||= card.attachments.last.url if card.attachments.any?
end
#
#
end
我就是这样解决这个问题的。我认为这更符合我的一些评论者所说的内容。这也提供了有关 pic
测试:
require 'rails_helper'
RSpec.describe TrelloToAc::Card do
let(:trello_card) do
cassette = 'trello_to_ac/cards/get'
VCR.use_cassette(cassette, match_requests_on: [:method]) do
Trello::Card.find 'itZmoIG4'
end
end
let(:email_sent_label) do
cassette = 'trello_to_ac/labels/get'
VCR.use_cassette(cassette, match_requests_on: [:method]) do
Trello::Label.find '60db99d5230c123a1ab808d0'
end
end
let(:trello_to_ac_card) do
TrelloToAc::Card.new(trello_card, 32188, 147, email_sent_label)
end
describe '#pic' do
it 'returns pic url from trello card' do
cassette = 'trello_to_ac/attachments/get'
result = VCR.use_cassette(cassette, match_requests_on: [:method]) do
trello_to_ac_card.pic
end
expect(result).to be_a String
end
end
end
实际代码:
class TrelloToAc::Card
attr_reader(
:card, :order_number, :list_ac_campaign_id, :email_sent_label
)
def initialize(card, order_number, list_ac_campaign_id, email_sent_label)
@card = card
@order_number = order_number
@list_ac_campaign_id = list_ac_campaign_id
@email_sent_label = email_sent_label
end
def send_email_if_needed
#
#
attach_trello_pic_to_ac_contact if pic
#
#
end
def pic
@pic ||= card.attachments.last.url if card.attachments.any?
end
end
这样我测试的是 class 的实例,而不是 实例变量 。我对其他方法也有类似的测试。