首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Chakram和NodeJS上传文件时出现“结束后写入”错误

使用Chakram和NodeJS上传文件时出现“结束后写入”错误
EN

Stack Overflow用户
提问于 2017-06-30 22:19:56
回答 1查看 294关注 0票数 1

我用Chakram (它基于Mocha)和NodeJS测试API。下面是测试代码(我测试一个获取文件和一些数据的WebService,然后将其上传到FTP服务器):

代码语言:javascript
复制
let chakram = require('chakram'),
    expect = chakram.expect,
    wait = chakram.wait;
let fs = require('fs')
let path = require("path");
let g = require('./lib/globals.js'); /* I define some globals, like g.portfolioUrl: the WebService url I'll test  */
let assert = require('assert');

...

it("should put a file in root folder", function () {
        let $body = {
            action: 'putFile',
            parentPath: '/',
            filenameToStore: 'sample_picture.png'
        };
        /* "options['headers']" is already defined and a "before" step adds authentication cookie */
        options['headers']['Content-Type'] = 'multipart/form-data; charset=utf-8; boundary='
            + Math.random().toString().substr(2);
        options['formData'] = {
            pkgFile: fs.createReadStream(path.resolve(__dirname, '../test/res/sample_picture.png'))
        };
        return chakram.post(g.portfolioUrl, $body, options).then(function (response) {
            expect(response).to.have.status(200);
            return response;
        });
    });

我得到这个错误(似乎与fs.createReadStream有关):

代码语言:javascript
复制
Error:
write after end
    at write_ (_http_outgoing.js:635:15)
    at ClientRequest.write (_http_outgoing.js:630:10)
    at Request.write (D:\wamp64\www\***\test\***\node_modules\request\request.js:1514:27)
    at FormData.ondata (internal/streams/legacy.js:16:26)
    at emitOne (events.js:115:13)
    at FormData.emit (events.js:210:7)
    at FormData.CombinedStream.write (D:\wamp64\www\***\test\***\node_modules\combined-stream\lib\combined_stream.js:118:8)
    at DelayedStream.ondata (internal/streams/legacy.js:16:26)
    at emitOne (events.js:115:13)
    at DelayedStream.emit (events.js:210:7)
    at DelayedStream._handleEmit (D:\wamp64\www\***\test\***\node_modules\delayed-stream\lib\delayed_stream.js:82:15)
    at ReadStream.source.emit (D:\wamp64\www\***\test\***\node_modules\delayed-stream\lib\delayed_stream.js:29:19)
    at addChunk (_stream_readable.js:252:12)
    at readableAddChunk (_stream_readable.js:239:11)
    at ReadStream.Readable.push (_stream_readable.js:197:10)
    at onread (fs.js:2004:12)
    at FSReqWrap.wrapper [as oncomplete] (fs.js:663:17) {stack: Error: write after end
    at write_ (_http_outgoi… FSReqWrap.wrapper [as oncomplete] (fs.js:663:17),
message: write after end}

已在使用NodeJS 6.11.0和8.1.3的Windows10上进行测试。

我用Mocha找到了一些可能的解决方案(参见How to unit test with a file upload in mocha),但我不知道如何使其适用于Chakram。

EN

回答 1

Stack Overflow用户

发布于 2017-10-12 08:56:07

Chakram包含一个等待请求完成的方法。

https://github.com/dareid/chakram#waiting

你可以这样尝试:

代码语言:javascript
复制
const response = chakram.post(g.portfolioUrl, $body, options);
expect(response).to.have.status(200);
return wait();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44848682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档