小编fra*_*ure的帖子

如何使用Mocha + Sinon在sails.js中测试控制器中的方法?

我是新手测试并试图了解如何测试一个相当简单的控制器动作.我遇到的问题是不知道如何完成模拟控制器内部的方法,甚至不知道何时适合这样做.

该操作在我的webapp的db中创建一个挂起的用户并返回一个join链接.它看起来像这样:

module.exports = {

    create: function(req, res, next) {

        var name,
            invitee = req.allParams();

        if ( _.isEmpty(invitee) || invitee.name === undefined) {
            return res.badRequest('Invalid parameters provided when trying to create a new pending user.');
        }

        // Parse the name into its parts.
        name = invitee.name.split(' ');
        delete invitee.name;
        invitee.firstName = name[0];
        invitee.lastName = name[1];

        // Create the pending user and send response.
        PendingUser.create(invitee, function(err, pending) {
            var link;

            if (err && err.code === 'E_VALIDATION') {
                req.session.flash = { 'err': …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocha.js sinon sails.js

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

如何在datomic中更新/覆盖带基数的ref属性?

假设我有一个包含属性的模式:x/value,其中:x/value是一个组件,是一个ref,并且基数很多.架构还有一个x的id :x/id.

现在让我们说我说我做了以下事情:

(d/transact conn [{:x/id "1234" :x/value [{:text "test"}]}])
Run Code Online (Sandbox Code Playgroud)

然后我想更新值,这意味着我想要替换:x/value,所以最后我有一个像这样的实体:

{:db/id <some eid>
 :x/id "1234"
 :x/value [{:text "replacement"}]}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

到目前为止,我尝试过以下方法:

(d/transact conn [{:x/id "1234" :x/value [{:text "replacement"}]}])
Run Code Online (Sandbox Code Playgroud)

但这只是添加了一个新的参考,所以我有一个实体看起来像:

{:db/id <some eid>
 :x/id "1234"
 :x/value [{:text "test"} {:text "replacement"}]}
Run Code Online (Sandbox Code Playgroud)

我认为,实现我想要的方法的一种方法是通过实体id手动收回两个:text属性,然后为x实体执行新的添加事务.

但我想知道是否有更好的方法来做到这一点.有任何想法吗?

clojure datomic

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

使用nbconvert将jupyter笔记本转换为pdf时出现“缺少$插入”错误消息

尝试使用以下命令将jupyter笔记本转换为pdf时:

jupyter nbconvert --to pdf "Search and Other Content Finding Features.ipynb"
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

! Missing $ inserted.
<inserted text>
                $
l.380 ... Other Content Finding Features_10_0.png}

?
! Emergency stop.
<inserted text>
                $
l.380 ... Other Content Finding Features_10_0.png}
Run Code Online (Sandbox Code Playgroud)

我发现这里有一些讨论。

但是,我在代码中找不到这些字符。可能还有其他原因吗?

latex jupyter-notebook nbconvert

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

如何在Flow类型中指定一个空对象?

假设我有一个变量,可以是JavaScript错误对象,也可以是空对象,如何在Flow中指定空对象?

我尝试过在各种地方(例如here)看到的一种可能性如下所示:

const err: Error | {||} = {};
Run Code Online (Sandbox Code Playgroud)

但这会产生以下流错误:

1: const exact: {||} = {};
                       ^ Cannot assign object literal to `exact` because inexact object literal [1] is incompatible with exact object type [2].
References:
1: const exact: {||} = {};
                       ^ [1]
1: const exact: {||} = {};
                ^ [2]
Run Code Online (Sandbox Code Playgroud)

看到它住在这里。该||符号显然$Exact<>这里所述的简写形式。所以我看不出为什么这确实失败了。

这是说我要分配给的空对象err是“ inexact对象常量”。我知道这是一个对象文字,实际上与空对象的“精确对象类型”不匹配。

我不明白的是为什么它不精确。在运行时它是一个空对象,这似乎很准确。有人可以在这里解释逻辑和/或如何指定errError一个空对象还是一个空对象?

javascript flowtype

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

有没有办法导出Google Play图书中的笔记?

我在Google Play图书上阅读的一本书中记录了一系列笔记.有没有办法将这些笔记一起导出为文本文档或类似格式?

google-books

5
推荐指数
3
解决办法
4675
查看次数

做出反应和浏览器化以与ES6一起使用

我有一个配置为如下的browserify任务:

module.exports = function(grunt) {

  grunt.config.set('browserify', {
    dev: {
      src: 'assets/js/main.jsx',
      dest: '.tmp/public/js/main.js',
      options: {
        debug: true,
        extensions: ['.jsx'],
        transform: ['reactify']
      }
    }
  });

  grunt.loadNpmTasks('grunt-browserify');
};
Run Code Online (Sandbox Code Playgroud)

我尝试将其配置为以这种方式使用es6:

module.exports = function(grunt) {

  grunt.config.set('browserify', {
    dev: {
      src: 'assets/js/main.jsx',
      dest: '.tmp/public/js/main.js',
      options: {
        debug: true,
        extensions: ['.jsx'],
        transform: ['reactify', {'es6': true}]
      }
    }
  });

  grunt.loadNpmTasks('grunt-browserify');
};
Run Code Online (Sandbox Code Playgroud)

但是,这将导致错误:

错误:路径必须是字符串

鉴于我不想在package.json中配置转换,因此我无法从文档中了解如何执行此操作。任何帮助,将不胜感激。

jsx grunt-browserify

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

使用 nodegit,如何在 git 存储库中找到给定文件上次更新的日期?

我正在尝试使用 nodegit 将 git 视为内容的数据库。因此,我正在编写函数来访问 repo 中的内容。我能够检索关于给定文件的文件 blob 和其他信息,但我正在努力获取时间戳信息。

我想获得 1) 创建文件的日期,以及 2) 上次更新的日期。但到目前为止,我还没有弄清楚这怎么可能。

为了获取文件,我需要按照以下步骤操作:

1)Commit使用检索最新的getMasterCommit
2) 从 中CommitTreeEntry使用getEntry.
3) 从TreeEntry,获取各种元数据,然后获取Blobwith getBlob
4) 从Blob,获取其他元数据以及文件的原始文本。

问题是,我唯一能得到我找到的日期的地方是Commit,它有一个date函数。这可能有助于获取上次更新日期,但实际上并没有帮助,因为它只返回Commmit(显然!)的日期,但尚不清楚该文件是否已针对该提交进行了更新。

我还希望能够获取为给定文件创建的日期。我可以想象这可能通过搜索给定 TreeEntry 的提交历史来获得,但我尚不清楚如何做到这一点。事实上,能够搜索给定文件的提交历史可能是这里需要的东西。但我一直无法看到这是否可能。

有人可以在这里提供指导吗?

git nodegit

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

我可以将作为 onFailure 目标的 SQS 队列中的消息从 Lambda 函数重新驱动回该函数吗?

我有一个 SQS 队列 (Q),它通过onFailureLambda 函数 (F) 的“目的地”设置接收消息。Lambda 函数由 EventBridge 事件总线“规则”触发。

我的问题是:我可以配置队列 Q 的重新驱动策略,以便我可以将消息直接重新驱动到函数 F 吗?

目前,我已将重新驱动允许策略设置为allowAll,但控制台中的“启动 DLQ 重新驱动”按钮被禁用。查看驱动器允许策略的配置设置,我感觉只有其他队列可以成为重新驱动的目标。

令我困惑的是,我的目标是使用onFailure“目的地”功能。仅当异步调用函数且队列同步触发 lambda 时才能使用目标。因此,如果我在 lambda 函数 F 前面放置一个队列,该队列可能是重新驱动的目标,那么我将无法使用该onFailure目标。

amazon-sqs amazon-web-services aws-lambda

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

如何使用mocha和should.js和sails.js编写二进制下载测试?

我正在尝试在测试时编写一个Sails.Js控制器动作来下载用户的头像图像.控制器操作如下所示:

/**
* Download avatar of the user with the specified id
*
* (GET /user/:id/avatar)
*/
avatar: function (req, res) {

  req.validate({
    id: 'string'
  });

  User.findOne(req.param('id')).exec(function (err, user){
        if (err) return res.negotiate(err);
        if (!user) return res.notFound();

        // User has no avatar image uploaded.
        // (should have never have hit this endpoint and used the default image)
        if (!user.avatarFd) {
          return res.notFound();
        }

        var SkipperDisk = require('skipper-disk');
        var fileAdapter = SkipperDisk(/* optional opts */);

        // Stream the file down
        fileAdapter.read(user.avatarFd) …
Run Code Online (Sandbox Code Playgroud)

javascript download mocha.js should.js sails.js

4
推荐指数
1
解决办法
1450
查看次数

Docpad的@getBlock有什么作用?

这是一个简单的问题,我无法找到答案.我刚刚开始使用docpad来构建一个站点.我在HTML5 Boilerplate骨架中遇到以下行:

<%- @getBlock('styles').add(["/style.css"]).toHTML() %>

有谁知道这是做什么的.端点是它输出以下html:

<link rel="stylesheet" href="/style.css" />

但我不确定这里的内容是什么,为什么这个简单的css链接是以这种方式生成的.

任何照明都将非常感激.

更新

在玩了这个之后,似乎@getBlock所做的是输出某个html代码块.在这种情况下,样式似乎指定代码.如果这是正确的,那么知道什么是Docpad中的其他块,或者@getBlock函数(?)来自哪个其他框架...

docpad

3
推荐指数
1
解决办法
1420
查看次数