如何使用rspec编写测试用例来发送通知消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用rspec编写测试用例来发送通知消息相关的知识,希望对你有一定的参考价值。

在我的应用程序中,我有一个主题控制器,我需要编写一个用于创建新主题的测试用例。创建新主题时,它将被重定向到新创建的主题的显示页面,并显示通知“已成功创建主题!”。我需要编写一个测试用例来检查显示的通知是否正确使用rspec.I有主题控制器:

 def create
@topic = Topic.new(topic_params)
if (@topic.save)
  redirect_to @topic, :notice => 'Topic was created successfully!'
else
  render :action => 'new'
end
end

TopicController规范:

it "should create new Topic and renders show" do
    expect {
      post :create,params:{ topic:{topicname: "Tech"} }
    }.to change(Topic,:count).by(1)
    expect(response).to redirect_to(topic_path(id: 1))
   /// expect().to include("Topic was created successfully!")
  end

我已经编写了用于重定向到显示页面的测试用例。但我仍然坚持检查我在代码中的评论中提到的通知。

答案

使用feature spec(集成测试)而不是控制器规范来测试用户看到的应用程序:

# spec/features/topics.rb
require 'rails_helper'
RSpec.feature "Topics" do
  scenario "when I create a topic with valid attributes" do
    visit '/topics/new'
    fill_in 'Topicname', with: 'Behavior Driven Development' # Adjust this after whatever the label reads
    click_button 'create topic'
    expect(page).to have_content 'Topic was created successfully!'
  end

  scenario "when I create a topic but the attributes are invalid" do
    visit '/topics/new'
    fill_in 'Topicname', with: ''
    click_button 'create topic'
    expect(page).to_not have_content 'Topic was created successfully!'
    expect(page).to have_content "Topicname can’t be blank"
  end
end

虽然您可以浏览闪存哈希,但是您应该进行集成测试,因为控制器测试存在缺陷,并且不会覆盖路由中的错误,因为应用程序的大部分都被删除了。

事实上,您可能想重新考虑使用控制器规范,因为RSpec和Rails团队建议使用集成测试。如果要在比特征规范更低的级别进行测试,请使用request specs

看到:

另一答案

你应该做这样的事情

expect(flash[:notice]).to match(/Topic was created successfully!*/)

以上是关于如何使用rspec编写测试用例来发送通知消息的主要内容,如果未能解决你的问题,请参考以下文章

在编写rspec测试用例时如何覆盖ruby方法的局部变量?

如何编写测试用例来覆盖承诺链中所有嵌套的“then”回调

Rspec用于检查用户使用设计宝石登录或未登录的天气

如何使用 rspec 测试 mandrill api

Python + pytest + yaml + allure + mysql + redis + 钉钉/企业微信通知,接口自动化框架V2.0,支持多业务处理,仅需维护yaml用例,无需要编写代码

Python + pytest + yaml + allure + mysql + redis + 钉钉/企业微信通知,接口自动化框架V2.0,支持多业务处理,仅需维护yaml用例,无需要编写代码