TOGOUTECH

javascript - 如何为 requirejs 和 qunit 设置 grunt 任务

coder 2024-05-16 原文

我正在尝试使用 requirejs 和 grunt-contrib-qunit 设置 QUnit 环境。

这是我的。

咕噜文件:

qunit: {
  all: {
    options: {
      urls: [
        'http://localhost:8000/qunit/qunit-test-suite.html'
      ]
    }
  }
},

connect: {
  server: {
    options: {
      port: 8000,
      base: '.'
    }
  }
},

qunit-test-suite.html:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>QUnit Tests Suite: travis CI Test</title>
  <link rel="stylesheet" href="../components/libs/qunit/qunit/qunit.css">
</head>
<body>

  <div id="qunit"></div>
  <div id="qunit-fixture"></div>

  <script src="../components/libs/qunit/qunit/qunit.js"></script>
  <script>
    QUnit.config.autoload = false;
    QUnit.config.autostart = false;
  </script>

  <script data-main="qunit" src="../components/libs/requirejs/require.js"></script>

</body>
</html>

qunit.js:

require.config({
    baseUrl: "../",
    paths: {
      'jquery': 'components/libs/jquery/dist/jquery.min',

      // Test for Foo
      'foo': 'components/app/foo/foo',
      'test-Foo': 'components/app/foo/test-Foo'
    },
    shim: {
     'QUnit': {
       exports: 'QUnit',
       init: function() {
         QUnit.config.autoload = false;
         QUnit.config.autostart = false;
       }
      }
    }
});

require(['test-Foo'], function (Foo) {
  QUnit.load();
  QUnit.start();
});

测试-Foo.js:

define(['foo'], function(Foo) {

  'use strict';

  module("Foo");

  test("Foo return Test", function() {
    equal(Foo.foo(), "foo", "Function should return 'foo'");
    equal(Foo.oof(), "oof", "Function should return 'oof'");
  });

  test("Bar return Test", function() {
    equal(Foo.bar(), "barz", "Function should return 'bar'");
  });

});

问题是当我在浏览器中打开 test-suite.html 时一切正常。发送到 PhantomJS 后,我收到以下错误:

Running "connect:server" (connect) task
Started connect web server on http://localhost:8000

Running "qunit:all" (qunit) task
Testing http://localhost:8000/qunit/qunit-test-suite.html

>> PhantomJS timed out, possibly due to a missing QUnit start() call.
Warning: 1/1 assertions failed (0ms) Use --force to continue.

Aborted due to warnings.

完整设置:https://github.com/markusfalk/test-travis

测试运行:https://travis-ci.org/markusfalk/test-travis

感谢您的帮助:)

最佳答案

Jörn的帮助下我想出了一个工作设置。技巧是在 QUnit 加载之前设置 requireJS(将 requireJS 配置移动到 config.js 并首先加载它)。

要求:

  • grunt-contrib-qunit v0.7.0
  • qunit v1.18.0

HTML 测试套件:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>QUnit Tests Suite: asdf</title>
    <link rel="stylesheet" href="../components/libs/qunit/qunit/qunit.css">
  </head>
  <body>

    <div id="qunit"></div>
    <div id="qunit-fixture"></div>

    <script src="config.js"></script>
    <script data-main="unit" src="../components/libs/requirejs/require.js"></script>

  </body>
</html>

配置.js

var requirejs = {
  baseUrl: "../",
  paths: {
    //{{app}}
    'foo': 'components/app/foo/foo',
    'test-foo': 'components/app/foo/test-foo',

    //{{libs}}
    'unit': 'qunit/unit',
    'qunit': 'components/libs/qunit/qunit/qunit',
    'jquery.exists': 'libs/jquery.exists/jquery.exists',
    'jquery': 'components/libs/jquery/dist/jquery.min'
  },
  'shim': {
    'jquery.exists': ['jquery']
  }
};

单元.js

require([
  'qunit',
  'test-foo'
],
function(qunit, TestFoo) {
  TestFoo();
  qunit.start();
});

test-foo.js:

define(['jquery', 'qunit', 'foo'], function($, qunit, Foo) {
  'use strict';
  return function() {
    qunit.module("Foo");
    qunit.test("Foo Test", function() {
      equal(Foo.saySomething(), "Hello", "returns 'Hello'");
    });
  };
});

最后是我要测试的模块:

define(['jquery'], function($) {
  'use strict';
  var Foo = {
    saySomething: function() {
      return "Hello";
    }
  };
  return {
    saySomething: Foo.saySomething
  };
});

关于javascript - 如何为 requirejs 和 qunit 设置 grunt 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29435486/

有关javascript - 如何为 requirejs 和 qunit 设置 grunt 任务的更多相关文章

  1. c# - 隐藏另一个应用程序的任务栏按钮 - 2

    我希望能够从任务栏中隐藏另一个应用程序的窗口,而不隐藏窗口本身。具体来说,我想要运行多个不同的Web浏览器,这些浏览器在Alt+Tab列表中可见且可用,但不占用任务栏上的空间。(如果有人好奇原因:我编写了一个仪表板应用程序,它使用Vista的DwmRegisterThumbnailAPI来同时显示多个窗口的实时预览——如果您愿意的话,这是一种“画中画”。在这一点上,还有为这些窗口设置任务栏按钮似乎是多余的。)我知道更改其他窗口的样式以包含WS_EX_TOOLWINDOW会将其从任务栏中隐藏,我首先尝试了这个。但是,正如预期的那样,它产生了一些我不想要的副作用:标题栏变短了(我猜并非全是

  2. c# - 为 ASP.NET MVC 错误设置不同的语言 - 2

    我在VisualStudio2015上为葡萄牙语配置了一个ASP.NETMVC应用程序。在调试此应用程序时,我设置了<customErrorsmode="Off"/>,但所有错误都以葡萄牙语显示,我想以英语查看。我试图在Web.config中进行设置:<globalizationuiCulture="en-US"culture="en-US"enableClientBasedCulture="true"/>在Global.asax中我试过:Thread.CurrentThread.CurrentUI

  3. c# - 如果字节是 8 位整数,那么我们如何将它设置为 255? - 2

    Thebytekeyworddenotesanintegraltypethatstoresvaluesasindicatedinthefollowingtable.It'sanUnsigned8-bitinteger.如果它只有8位,那么我们如何分配它等于255?bytemyByte=255;我以为8位和一个字符是一回事? 最佳答案 一个字节中有256种不同的位配置000000000000000100000010...11111111所以可以给一个字节赋一个0-255范围内的值

  4. C# DataGridViewButtonCell 设置按钮文字 - 2

    我需要将我的DataGridViewButtonCell添加到Column中,并且我需要用不同的名称互相命名。但我没有找到任何文本属性。有人能帮帮我吗?我做那些事DataGridViewButtonCellb=newDataGridViewButtonCell();b.Value="name";MainTable.Rows.Add(b);它不起作用 最佳答案 如果您希望所有按钮具有相同的文本,请使用UseColumnTextForButtonValue属性(property)。如果你想为每个按钮使用不同的文本,那么使

  5. c# - 让我的 wpf 应用程序全屏(覆盖窗口的任务栏和标题栏) - 2

    我想让我的应用程序最大化到全屏意味着它隐藏Windows任务栏和标题栏。它应该由一个按钮触发。我正在尝试像这样开发我的应用程序窗口。在下面添加我的代码片段<controls:MetroWindowx:Class="EDUI.MainWindow"xmlns:controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns

  6. c# - 带参数的 Nunit 测试设置方法 - 2

    我们可以有一个带参数的测试设置方法吗?我需要为夹具中的每个测试进行不同的设置。我们是否有一些(或类似的方式)作为假设的想法:[SetUp][Argument("value-1")][Argument("value-2")][Argument("value-3")]publicvoidInitializeTest(stringvalue){//setenvvarwithvalue} 最佳答案 可以使用带有参数的TestFixture属性来完成。如果类中的所有测试都依赖于相同的参数,这就是

  7. ES近实时刷新与refresh_interval参数设置相关问题 - 2

    ES中的查询是近实时的,也就是说当数据添加到索引后并不能马上被查询到,等到索引刷新后才会被查询到,索引刷新相关字段为refresh_interval,默认为1s刷新一次。为何说ES的查询是近实时的呢?首先先了解下ES写入数据的过程:ES写入数据是先把数据写进Luence的**"memorybuffer"缓冲区**(同时也会把数据写一份到translogbuffer,进行定时同步到磁盘的持久性操作),Elasticsearch是基于Lucen

  8. c# - 如何在 itextsharp pdf 创建中设置单元格宽度 - 2

    如何使用C#在itextsharppdf单元格中设置单元格宽度和高度。我只是用cell.width=200f;但它应该显示错误信息。widthcannotbeset.我该怎么办?.. 最佳答案 您没有设置单元格的宽度。您应该设置列的宽度。您可以通过将它们应用于表格对象来做到这一点:float[]widths=newfloat[]{1f,2f};table.SetWidths(widths);Neha的回答是设置表格对象的宽度更多引用资料在这里:http://www.mikesdotnetting.com/Article/86/iTe

  9. c# - 如何将焦点设置到 WPF 工具包数据网格的特定单元格 - 2

    我正在使用WPF工具包提供的DataGrid控件来显示产品列表及其OpenStock、描述等。在此DataGrid中,我已将OpenStock列设置为可编辑,其余列不可编辑。当我的这个窗口加载时,我现在想要的是,我想将键盘焦点设置到OpenStock列的第一个单元格,如果可能的话,在编辑模式下。我搜索了2天,最后在这里发布。任何帮助或代码示例都会有所帮助。<my:DataGridAutoGenerateColumns="False"ItemsSource="{Binding}"Margin="2,2,2,55"x:Name="

  10. c# - 在任务异常的情况下,根据用户输入多次重试任务 - 2

    我的应用程序中的所有服务调用都是作为任务实现的。当任务出现故障时,我需要向用户显示一个对话框以重试上次失败的操作。如果用户选择重试,程序应该重试该任务,否则程序的执行应该在记录异常后继续。任何人都对如何实现此功能有一个高层次的想法? 最佳答案 2017年5月更新C#6异常过滤器使catch子句更加简单:privatestaticasyncTask<T>Retry<T>(Func<T>func,intretryCount){while(true){try{varresult=awaitTask.Ru

随机推荐

  1. c# - 富文本框 - 粗体 - 2

    我知道这里有很多“如何加粗文本”的问题,但没有一个答案有帮助,我认为可能是富文本框是在运行时创建的。我正在制作一个聊天客户端,所以我有一个分成几行的富文本框,消息如下:{名称}:{消息}\r\n我想加粗这个名字,我已经尝试了很多代码示例,但这是我最接近它的工作方式:intlength=textBox.Text.Length;textBox.Text+=roomChatMessage.from+":"+roomChatMessage.text+"\r\n";textBox.Select(length,roomChatMessage.from.Length)

  2. c# - 为什么所有委托(delegate)类型都彼此不兼容? - 2

    在C#中,所有委托(delegate)类型都彼此不兼容,即使它们具有相同的签名。例如:delegatevoidD1();delegatevoidD2();D1d1=MethodGroup;D2d2=d1;//compiletimeerrorD2d2=newD2(d1);//youneedtodothisinstead这种行为和语言设计决策背后的原因是什么。 最佳答案 InC#alldelegatetypesareincompatiblewithoneanother,eveniftheyhavethesamesignature.Wha

  3. c# - 无法为泛型类型创建 TypeConverter - 2

    我想创建一个TypeConverter对于通用类,像这样:[TypeConverter(typeof(WrapperConverter<T>))]publicclassWrapper<T>{publicTValue{//get&set}//othermethods}publicclassWrapperConverter<T>:TypeConverter<T>{//onlysupportToandFromstringspublicoverrideboolCanConvertFrom(ITypeDescriptorContextcon

  4. c# - 无法加载文件或程序集临时 ASP.NET 文件 - 2

    我正在使用C#(.NETFramework4)在ASP.NET上开发一个网站。创建新网站项目后,我尝试运行该项目。但我收到以下错误:Couldnotloadfileorassembly'file:///C:\Windows\Microsoft.NET\Framework\v4.0.30319\TemporaryASP.NETFiles\myfirst\159977c5\b9e740fc\App_global.asax.yfqtni9g.dll'oroneofitsdependencies.Thesystemcannotfindthefilespecified.我已经浏览

  5. c# - 如何将 xmldocument 保存到流中 - 2

    我已经编写了代码来使用XmlReader解析我的xml文件,所以我不想重写它。我现在已经为程序添加了加密。我有encrypt()和decrypt()函数,它们采用xml文档和加密算法。我有一个使用xml阅读器解析文件的函数,但现在有了xml文档,我不确定如何创建xmlreader。问题是如何将我的xml文档保存到流中。我敢肯定这很简单,但我对流一无所知。XmlDocumentdoc=newXmlDocument();doc.PreserveWhitespace=true;doc.Load(filep);Decrypt(doc,key);StreamtempStream=null;doc

  6. c# 在运行时创建一个未知的泛型类型 - 2

    所以我有一个泛型类,它可能需要在它自己的一个方法中创建一个具有不同类型泛型的实例,其类型是通过反射获得的。这很重要,因为此存储库映射T到数据库表[这是我正在写的一个ORMish],如果代表T的类有一个代表另一个表的集合,我需要能够实例化它并将其传递到存储库[alaInception]。我正在提供方法,以防它更容易发现问题。privatePropertiesAttributesAndRelatedClassesGetPropertyAndAttributesCollection(){//ReturnsaListofPropertyAndAttributesvartype=typeof(T

  7. c# - 通过 SendMessage 或其他方式异步 GetForegroundWindow? - 2

    有没有一种方法可以在焦点从任何窗口更改到另一个窗口(甚至在Windows应用程序之间)时得到通知,这样我就可以在用户更改焦点时立即调用我的委托(delegate)?我一直在想我可能只需要做轮询:(:(每1秒并调用GetForegroundWindow但我真的不想这样做。 最佳答案 SetWinEventHook()可能是你最好的选择;您可以监听EVENT_SYSTEM_FOREGROUND以监听前景窗口的变化-或者甚至监听EVENT_OBJECT_FOCUS以监听应用程序和控件内更精细的焦点变化。您需要将其与WINEVENT_OUT

  8. c# - 在应用依赖注入(inject)时,Func<in T, out TResult> 是否适合用作 ctor arg? - 2

    例子:publicclassBusinessTransactionFactory<T>whereT:IBusinessTransaction{readonlyFunc<Type,IBusinessTransaction>_createTransaction;publicBusinessTransactionFactory(Func<Type,IBusinessTransaction>createTransaction){_createTransaction=createTransaction;}publicTCreate(){return(T)_cr

  9. c# - 将德语字符(变音符号、重音符号)替换为英语对应字符 - 2

    将德语字符(元音变音、重音符号)替换为英语字符我需要从各种文本字段中删除所有德语特定字符,以便处理到另一个系统中,该系统不会接受它们为有效。所以我知道的字符是:ß一种Øü一种厄ü目前我有一些手动替换它们的方法:myGermanString.Replace("ä","a").Replace("ö","o").Replace("ü","u").....但我希望有一种更简单/更有效的方法来做到这一点。由于每次运行我将在数千个字符串上执行此操作,其中99%将不包含这些字符。也许涉及某种Culture

  10. c# - 改进的 IValueConverter——MarkupExtension 还是 DependencyObject? - 2

    我在网上看到了两种不同的增强IValueConverter的方法。其中一个从MarkupExtension扩展了ValueConverter,另一个从DependencyObject扩展。我无法从两者中扩展,所以我想知道是否有一个比另一个更好? 最佳答案 从每一个派生给你不同种类的力量和灵active:源自MarkupExtension使您能够使用值转换器而不使其成为静态资源,如下所述:publicclassDoubleMe:MarkupExtension,IValueConverter{publicoverrideobjectPr