小编sch*_*eld的帖子

如何从另一个文件中调用macrodef

我在单独的文件中写了一个小的macrodef:

macrodefs.xml

<macrodef name="do-cool-stuff">
  <attribute name="message"/>

  <sequential>
    <echo message="@{message}" />
  </sequential>
</macrodef>
Run Code Online (Sandbox Code Playgroud)

我有第二个文件,我的主要构建文件:

build.xml文件

<target name="build">
  <!-- do this and that -->

  <!-- cheking out macrodefs.xml via CVS -->

  <ant antfile="macrodefs.xml" target="do-cool-stuff" >
    <property name="message" value="Hello, World!" />
  </ant>
</target>
Run Code Online (Sandbox Code Playgroud)

你可能会猜到这不会起作用.错误消息类似于:

Target 'do-cool-stuff' does not exist in this project.
Run Code Online (Sandbox Code Playgroud)

我发现唯一可行的解​​决方案是在macrodefs.xml中提供额外的目标来转发ant调用.

是否有可能从另一个文件中调用macrodef?

提前致谢.

ant build macrodef

10
推荐指数
1
解决办法
1万
查看次数

使用mod_expires覆盖缓存标头

我想使用apache中的mod_expires模块设置cache-headers.我的配置看起来像这样:

<LocationMatch ^/static >
    ExpiresDefault "access plus 1 years"
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

问题是,文件是由我无法控制的第三个系统生成的.这些系统提供带有以下标题的文件:

Date Mon, 24 Oct 2011 08:39:02 GMT
Cache-Control no-cache,no-store,must-revalidate
Pragma no-cache
Expires Thu, 01 Dec 1994 16:00:00 GMT
Run Code Online (Sandbox Code Playgroud)

这些标头使得无法使用mod_expires设置缓存标头.http://httpd.apache.org/docs/2.2/mod/mod_expires.html告诉我们原因:

当Expires标头已经是服务器生成的响应的一部分时,例如,当由CGI脚本生成或从源服务器代理时,此模块不会更改或添加Expires或Cache-Control标头.

是否有任何可能的方法来规避此规则并使用mod_expires覆盖标头?

更新: 一种可能的解决方案是,为了避免此限制,仅使用mod_headers来设置缓存标头.不幸的是,这不是一个替代方案,因为必须计算这些值.

谢谢它提前.

apache mod-expires

10
推荐指数
1
解决办法
4395
查看次数

Chrome 32 - 通过JS或webdriver控制仿真

我喜欢新Chrome中引入新仿真功能.事实上,我喜欢用它来测试移动网站的多种分辨率/设备.为此,我需要对仿真功能进行某种控制.

有没有办法控制希望设备被模拟?

知道如何开始OpenQA.Selenium.Chrome.ChromeDriver模拟移动设备会很高兴.

提前致谢.

google-chrome webdriver google-chrome-devtools selenium-chromedriver selenium-webdriver

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

量角器:使用 api 调用的结果

我创建了一个小的 api 来动态生成测试数据。每次调用都会创建一个新用户并返回创建的数据。

要加载数据,我使用包request

var flow = protractor.promise.controlFlow();
var result = flow.execute(function() {
    var defer = protractor.promise.defer();
    request('http://localhost/test/recipe/person', function (error, response, body) {
        if (!error && response.statusCode === 200) {
            defer.fulfill(JSON.parse(body));
        }
    });
    return defer.promise;
});
Run Code Online (Sandbox Code Playgroud)

要使用检索到的数据,我必须解决承诺并在回调中继续测试脚本:

result.then(function(data) {
    element(by.model('username')).sendKeys(data.person.email);
    element(by.model('password')).sendKeys('test');
    $('button[type="submit"]').click();
});
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种回调处理以及它可能导致的地狱。除此之外,Protractor 在隐藏这个混乱的回调处理方面非常出色。所以,问题是:

如何使用异步调用的结果?

最后,我想执行如下代码:

var flow = protractor.promise.controlFlow();
var result = flow.execute(function() {...});

element(by.model('username')).sendKeys(result.person.email);
//...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

javascript ajax http promise protractor

2
推荐指数
1
解决办法
6062
查看次数

在sml中评估或执行字符串

我正在寻找一种在sml中以字符串形式执行的方法.例如:

val evalResult = eval "1 + 1";
> val it = 2 : int
Run Code Online (Sandbox Code Playgroud)

我无法相信我没有找到关于这个主题的任何资源......

任何帮助表示赞赏.

sml smlnj

0
推荐指数
1
解决办法
122
查看次数