使用sinon和enzyme我想测试以下组件:
// Apple.js
class Apple extends Component {
componentDidMount = () => {
this.props.start();
Api.get()
.then(data => {
console.log(data); // THIS IS ALWAYS CALLED
this.props.end();
});
}
render () {
return (<div></div>);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我只是检查endApy.called,它总是错误的.但是将它包裹在一个setTimeout遗嘱中会使它通过.为什么console.log()总是被召唤而不是props.end?为什么setTimeout修复它?有没有更好的方法呢?
// Apple.test.js
import sinon from 'sinon';
import { mount } from 'enzyme';
import Api from './Api';
import Apple from './Apple';
test('should call "end" if Api.get is successfull', t => {
t.plan(2); …Run Code Online (Sandbox Code Playgroud) 我在创建对象时可以在哪里设置关联模型APIView?
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Run Code Online (Sandbox Code Playgroud)
上面的工作generics.ListAPIView但是怎么样APIView?我有两个型号A和B.B有一个ForeignKey到A.在创建B如何设置ForeignKey保存之前的实例时?
a = A.objects.get(id=request.DATA['a_id'])
serializer = BSerializer(data=request.DATA)
if serializer.is_valid():
b = serializer.save(a=a)
Run Code Online (Sandbox Code Playgroud)
如果我把这个a字段包含在内BSerializer,那就抱怨了a This field is required.如果我将其排除,那么它会给出一个IntegrityError.它应该如何完成?
在POST方法中创建对象时,如何仅返回创建对象的几个字段?这取自文档:
def post(self, request, format=None):
serializer = SnippetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
这里serializer.data包括序列化程序中定义的所有字段,但我只想返回其中的几个。
对于我的API,我需要使用HTTP 200和JSON内容响应每个请求的错误.所以不要回答:
Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
我想这样做:
res = {"code": 400, "message": "Bad Requset"}
Response(res)
Run Code Online (Sandbox Code Playgroud)
放这种东西的最佳地点在哪里以及如何?在Serializer,Renderer,Exception?我需要捕获序列化程序可能抛出的每个异常以及我编写的自定义异常.
原谅我的无知.我目前有一个脑屁,无法找到解决方案.假设我有一份清单[1, 1, 0, 0].我想计算所有四位二进制数,它们恰好有两个1和两个零,如:
['0110', '0011', '0101', '1100', '1010', '1001']
Run Code Online (Sandbox Code Playgroud)
这有效:
from itertools import permutations
set([''.join(x) for x in list(permutations('0011', 4))])
Run Code Online (Sandbox Code Playgroud)
但是这会计算整个排列,然后丢弃副本.意思是,它计算了24次,但我只需要6次[1, 1, 1, 1, 0, 0, 0, 0].如果收集的话,它会更加重要.
这应该很容易,但我无法绕过它.
如果这是一个愚蠢的问题,请耐心等待.如何键入一个带有两个记录并返回其公共字段数组的泛型函数?
比方说我有:
type A = { name :: String, color :: String }
type B = { name :: String, address :: Address, color :: String }
myImaginaryFunction :: ???
-- should return ["name", "color"] :: Array of [name color]
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数,它接受任何两种类型的记录并返回一个公共字段数组.一个haskell解决方案也可以工作.
当您想对代码提出建议时,您使用了什么功能?让我们说,其中一位成员认为以另一种方式编写代码的特定部分会更好,如果获得批准,他/她是否会实施实际的更改?
我的序列化程序上有几个字段,我已经覆盖了validate序列化程序上的方法来进行一些对象级验证.
问题是在验证之后,我需要在将最终数据传递给create function之前编辑它.目前,我这样做:
class MySerializer(serializers.ModelSerializer):
def validate(self, attrs):
# Some lengthy validation with attrs['a'] and attrs['b'] and attrs['c']
# if validated
attrs['a'] = updated_a
attrs['b'] = updated_b
attrs['c'] = updated_c
return attrs
Run Code Online (Sandbox Code Playgroud)
验证后必须进行更新.我想知道是否有更好的方法来处理这个问题.
我可以继承Field并提供自定义to_internal,to_representation但我不知道如何事先进行验证.
我在Mac上安装了Boot2Docker.通过单击应用程序图标,将打开一个终端窗口,其中一些bash脚本正在运行以准备docker vm,然后您就可以开始使用了.
我的问题是,我想编写一个bash脚本来运行Boot2Docker vm,然后运行一些docker的命令.一些事情:
#!/usr/bin/env bash
boot2docker start # WHAT SHOULD GO HERE?
docker run -it --rm -p 8888:8888 --name {name} -v /src:/src image
Run Code Online (Sandbox Code Playgroud)
单击应用程序图标时会采取哪些步骤,以便我可以在bash脚本中手动执行以准备Boot2Docker?
我怎么能只使用map,reduce或filter或者创建一个阵列上的自定义迭代任何功能性的方式?
假设我想将一个数组映射到另一个数组,该数组包含源数组中每三个相邻元素的总和:
var source = [1, 2, 3, 4, 6, 7, 8] // to [6, 17, 8]
Run Code Online (Sandbox Code Playgroud)
或者制作一个包含两个元素的桶:
var source = [1, 2, 3, 4, 5, 6, 7] // to [[1, 2], [3, 4], [5, 6], [7]]
Run Code Online (Sandbox Code Playgroud)
对于第二个,我有以下但是看起来不是很有用,因为我正在通过索引访问数组:
function* pairMap(data) {
yield* data.map((item, index) => {
if (index > 0) {
return [data[index - 1], item];
}
});
}
Run Code Online (Sandbox Code Playgroud)
我对这样做的功能方式很感兴趣.
所以我有以下代码,我希望x函数null在被调用3次数后返回,但它不断返回相同的函数:
const repeat = (n, tailFn) => {
for (let i = 0; i < n; i++) {
tailFn = () => tailFn;
}
return tailFn;
};
const x = repeat(2, x => null);
console.log(x()); // function tailFn() { return _tailFn }
console.log(x()()); // function tailFn() { return _tailFn }
console.log(x()()()()()()); // function tailFn() { return _tailFn }
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?在CodePen上看到它.
我是clojure/clojurescript的新手,并试图找出为什么这个函数总是返回100作为第一个随机整数和最后几个零:
(take 10 (iterate rand-int 100))
;; (100 30 19 15 4 3 2 0 0 0)
Run Code Online (Sandbox Code Playgroud)
但这可以按预期工作:
(take 10 (repeatedly #(rand-int 100)))
;; (14 14 16 92 10 69 85 74 65 95)
Run Code Online (Sandbox Code Playgroud)
但是如果我使用匿名fn,iterate我得到nil第一个值,但其余的看起来没问题:
(take 10 (iterate #(rand-int 100)))
;; (nil 27 19 76 70 40 63 72 32 55)
Run Code Online (Sandbox Code Playgroud) 在haskell中,如何定义可选的类型参数:
data Car a b c = Car { company :: a
, model :: b
, year :: c
}
-- I want to return this type if `c` is not provided
data Car a b = Car { company :: a
, model :: b
}
Run Code Online (Sandbox Code Playgroud)
在上面,我想有一个可选类型,c并根据它是否提供返回略有不同的类型.我该怎么做呢?我这样做完全错了吗?
django ×3
javascript ×3
haskell ×2
bash ×1
bitbucket ×1
boot2docker ×1
clojure ×1
docker ×1
ecmascript-6 ×1
enzyme ×1
git ×1
github ×1
macos ×1
permutation ×1
promise ×1
purescript ×1
python ×1
recordtype ×1
serializer ×1
sinon ×1
unit-testing ×1
validation ×1