小编pla*_*ixo的帖子

在Rails中添加多个记录

我是一个新手,通过创建我的第一个rails应用程序绊脚石.我正在尝试从嵌套表单向表中添加多个记录,目前只添加了最后一条记录.

我正在制作一个表格,允许用户将数学方程与在给定阅读规则下应该如何阅读相关联.在抽象视图中,两个简单记录将是:

equation: "x-3", readingRule:"Simple", transcription"x take away three" 
equation: "x-3", readingRule:"Standard", transcription"x minus three"
Run Code Online (Sandbox Code Playgroud)

我有四个表:'方程','转录','readingRuleSets'和'测试'.单个测试由等式的id,转录和readingRuleSet组成.

我有一个表单,其中有一个文本字段供用户选择方程式的id,以及四个文本字段(与我的四个阅读规则集相关联),供他们选择转录的id.当我点击提交时,我想要添加四个新的"测试",每个转录一个.目前,Rails只添加了最后一个.

我认为这是因为html源中文本字段的id是相同的.我尝试将字段名称与each_with_index中的索引连接起来,但这使得我将一条记录添加到'test',并且reading_rule_set_id为null,因为我修改了带有索引的列的名称.所以我已经把它拿出来了,看了很多,看了看看有轨电视196,我还是被卡住了.

代码的相关部分:

\程序\型号\ test.rb

class Test < ActiveRecord::Base
  has_many :equations
  has_many :reading_rule_sets
  has_many :transcriptions
  accepts_nested_attributes_for :equations :transcriptions :reading_rule_sets
end
Run Code Online (Sandbox Code Playgroud)

其他三个表分别有'belongs_to'.

\程序\意见\测试:

<div>
    <fieldset>
        <legend> Reading Rules and Transcriptions </legend>
            <% ReadingRuleSet.all.each_with_index do |rrs, index| %>
                <div class="row">
                    <div class="col-md-6">
                        <label><%= rrs.name %></label>
                    </div>
                    <div class="col-md-6">
                        <%= f.text_field :transcription_id %>
                        <%= f.hidden_field :reading_rule_set_id, :value =>rrs.id %>
                        <!--# .to_s + index.to_s-->
                    </div>
                </div>
            <% end …
Run Code Online (Sandbox Code Playgroud)

mysql ruby-on-rails nested-forms ruby-on-rails-4

6
推荐指数
1
解决办法
105
查看次数

xUnit 是否支持“相同的测试,不同的设置”?或者我如何编写在本地运行的开发测试,并在管道中测试部署?

TL;DR:按照标题:我如何运行相同的测试但有不同的设置?

我正在使用 C#、Visual Studio 工作,通过 Azure DevOps(nee VSTS)部署到 Azure 中的 WebApp。

正在开发的软件在 Azure 中配置资源,并在 Azure Active Directory 中配置身份。

这意味着我有这样的测试:

[Fact]
public void ShouldCreateAzureDevOpsProject()
{
   _azureDevOpsHelper.GetAzureDevOpsProject(_projectName).Should().NotBe(null);
}

[Fact]
public void ShouldPutDefaultFileInRepo()
{ 
  _azureDevOpsHelper.GetDefaultFileFromRepo(_projectName).Should().NotBe(null);
}

[Fact]
public void ShouldEnableAllMicrosoftResourceProviders()
{
   _azureSubscriptionHelper.GetMicrosoftResourceProviders().Select(x => x.RegistrationState).Should().NotContain("NotRegistered");
}
Run Code Online (Sandbox Code Playgroud)

我想在编写代码时对代码运行这些测试。该代码在我的笔记本电脑上运行,因此设置(我目前在 xUnit Fixture 中)是:

new EngineOrchestrator.EngineOrchestrator().RequestInstance(userSuppliedConfiguration);
Run Code Online (Sandbox Code Playgroud)

但这些测试同样适用于在我们的部署管道中运行,以在部署到我们的测试环境后检查回归情况。出于这些目的,设置将涉及创建 HTTP 客户端并访问应用程序的端点。

要点是,无论设置如何,测试都是相同的。在“本地”和“管道”情况下,要测试的值均来自 json 配置文件;隔离是通过在部署期间为测试添加不同的配置文件来实现的。

换一种方式; 我正在尝试弄清楚如何封装该设置,以便两个不同的设置可以共享相同的测试。这与夹具等的作用相反,多个测试可以共享相同的设置。

我努力了:

  • 根据运行测试的机器切换“设置”
if (Environment.MachineName.StartsWith("Plavixo"))
{
    new EngineOrchestrator.EngineOrchestrator().RequestInstance(userSuppliedConfiguration);
}
else
{
    HttpEngineHelper.RunOrchestrator(userSuppliedConfiguration, authenticationDetails);
}
Run Code Online (Sandbox Code Playgroud)

这是我当前的解决方案,但它感觉很脆弱,并且使测试工件变得巨大,因为它必须包含能够更新引擎的所有源代码,即使它要在构建机器上运行。

  • 将测试抽象化,并继承到在构造函数中具有特定设置的具体类。
public class LocalBootstrap : BootstrapTests.BootstrapTests
{
   public LocalBootstrap():base() …
Run Code Online (Sandbox Code Playgroud)

c# testing integration-testing xunit

5
推荐指数
1
解决办法
852
查看次数