我正在尝试使用rspec为我的Rails应用程序编写测试,我基本上想创建两个实例
1)计数器值为0的用户
2)计数器值等于或大于5的用户
这是我的工厂用户代码
FactoryBot.define do
factory :user do
sequence(:email) { |n| "user#{n}@abc.com" }
name 'rishabh agarwal'
password '12345678'
counter 0
end
end
我在user_controller_spec文件中编写了
context 'get#redeem' do
it 'should not redeem the account for points lesser than 5' do
get :redeem, format: :json,params:{:id=>dummyUser.id}
expect(JSON.parse(response.body)["message"]).to eq("You cannot redeem your points")
end
it 'should redeem the account if points are greater than or equal to 5' do
get :redeem, format: :json,params:{:id=>dummyUser.id}
json=JSON.parse(response.body)
expect(JSON.parse(response.body)["counter"]).to eq(5)
end
end
虽然我使用let!
创建实例
let!(:dummyUser){create :user}
答案 0 :(得分:1)
这就是我构建测试的方式:
context "get#redeem" do
before { get :redeem, format: :json, params: { id: user.id } }
context 'when the user has more than or 5 points' do
let(:user) { create(:user, counter: 5) }
it 'redeems the account' do
json = JSON.parse(response.body)
expect(json["counter"]).to eq 5
expect(response.status).to eq 200
end
end
context 'when the user has less than 5 points' do
let(:user) { create(:user, counter: 4) }
it 'does not redeem the account' do
json = JSON.parse(response.body)
expect(json["message"]).to eq "You cannot redeem your points"
expect(response.status).to eq 403
end
end
end
一些注意事项:
json_response
的方法,如下所示:def json_response
@json_response ||= JSON.parse(response.body)
end
答案 1 :(得分:0)
找到了一种更好的方法....只需在工厂中将计数器变量初始化为0,然后在使用上下文的情况下再更改5即可更改计数器的值 dummyUser.counter = 5 dummyUser.save 这会将值更改为5,供测试用例使用。
答案 2 :(得分:0)
您只需在create方法中传递属性
create(:user, counter: 5)